| کانال توسعهدهندگان پایتون |
Ir al canal en Telegram
⭕️ کانال توسعهدهندگان پایتون دولوپیکس 💠 دولوپیکس | جامعه توسعهدهندگان ایرانی 💎 @Developix 🚀 Developix.ir 📌 پشتیبانی و تبلیغات: @DevelopixSupport
Mostrar más7 118
Suscriptores
+2324 horas
+1007 días
+21030 días
Archivo de publicaciones
درود.
میخواستم درباره ی آبجکت معروف و شناخته شده ی generator حرف بزنیم ولی با نگاه کمی متفاوتتر تا به این برسیم که دقیقا چطور کار میکنه و چطور پیداش شد. نیاز هست که کمی حرف های پیش نیاز بزنیم صبور باشید.
قبل از هر چیزی درباره ی خود فانکشن حرف بزنیم؛ ولی نه تو پایتون بلکه تو C:
وقتی یه فانکشنی کال میشه، توی call stack یک frame جدید میاد که برای اون فانکشن هست. این frame شامل تمام متغیر های لوکال و پارامتر های اون فانکشنه. وقتی فانکشن تموم میشه چه اتفاقی میفته؟ اون frame از stack پاپ میشه (یا دقیق ترش stack pointer کم میشه)
و نکته اینجاس که هرچی که توی اون frame هست دیگه قابل دسترس نیست و اگر استفادشون کنیم، undefined behavior هست. چرا؟ چون توی "مموری استک" این frame قرار داده شده بود و اون فضا الان آزاد شده و قابل استفاده هست برای بقیه (توی پرانتز، در C که مدیریت حافظه نداره، باید آبجکت هایی که توی heap میسازیم رو خودمون مدیریت کنیم نه استک):
int *returnArray() {
int arr[3] = {11, 22, 33};
printf("%p\n", arr);
printf("%d\n", arr[1]);
return &arr;
}
int main(void) {
int *arr;
arr = returnArray();
printf("%p\n", arr);
printf("%d\n", arr[1]); // ???
}
با اینکه آدرسش رو return کردیم ولی باز هم نمیتونیم به آیتم های لیست دسترسی داشته باشیم.
حالا اینارو گفتم که موضوع مهمی رو بگم. اونم اینه که تو پایتون هم همین call stack و اینا هست ولی اون frame object توی heap ساخته میشه. این یعنی اگر بخوایم میتونیم اون رو ذخیره داشته باشیم و همیشه بمونه! مثلا مانع از نابود شدن خودش و آبجکت های درونش بشیم. تو مثال زیر global f رو اگه از کامنت در بیارید obj از بین نمیره چون frame رو ذخیره کردیم:
from gc import collect
from sys import _getframe
class A:
def __del__(self):
print("del called")
def fn():
# global f
f = _getframe(0)
obj = A()
fn()
collect()
input()
خب حالا که اینو گفتیم بریم سراغ خود آبجکت فانکشن تو پایتون. وقتی فانکشن کال میشه یه frame object ساخته میشه. این frame object داخلش آبجکت های زیادی هست (مستقیم یا غیرمستقیم) از جمله رفرنس داره به متغیر های داخل اون namespace و رفرنسی داره به code object که یک unit ئه executable هست. داخل این code object ما bytecode ها رو داریم که همون instruction ها هستن.
درواقع instruction ها هستن که اجرا میشن و این state ذخیره میشه. تو کد زیر lasti یعنی last instruction. (توی cpu هم اتفاق مشابهی میفته. اینجا pvm میخواد بدونه چی رو اجرا کرده و حالا نوبت چیه):
from sys import _getframe
def fn():
print(_getframe(0).f_lasti)
a = 10
print(_getframe(0).f_lasti)
fn()
خب حالا بخش جالب ماجرا اینجاست. ما به عنوان طراحان فرضی زبان پایتون، میدونیم که frame ما میتونه خارج از موقع کال شدن هم زنده بمونه + از طرفی به state هم که دسترسی داریم. ( اینکه الان متغیر های local چیا هستن، اینکه الان تا instruction چندم اجرا شده و غیره)
فقط یه مشکلی هست، فانکشن های ما وقتی کال میشن از اولین instruction تا آخرینش رو اجرا میکنن و تموم میشن و همه ی آبجکت های داخل اون frame از بین میرن (اگر رفرنس دیگه ای نداشته باشن جای دیگه).
الان همه چیز محیا هست برای اینکه یه ساختار یا keyword جدیدی بیاریم تو زبان که هرجایی از execution فانکشن خواستیم بتونیم pause کنیم و اون رو با هر state ای که داره به حال خودش رها کنیم.
بیایم yield رو معرفی کنیم! هروقت yield اومد، کافیه اجرا رو متوقف کنیم و مثل فانکشن ها (که بعد از تموم شدنشون، frame شون از stack frame جدا میشن) frame این generator ها رو هم جدا کنیم.
بعدا اگه خواستیم generator رو ادامه بدیم و روش next بزنیم (مستقیم خودمون یا غیر مستقیم توسط پایتون) تنها کاری که باید بکنیم اینه که frameش رو برداریم و بچسبونیم به stack frame ممون و از اون state ای که بودیم ادامه بدیم.
def gen():
a = 1
yield
b = 1
yield
g = gen()
next(g)
print(g.gi_frame.f_lasti, g.gi_frame.f_locals)
next(g)
print(g.gi_frame.f_lasti, g.gi_frame.f_locals)
این call stack با linked list پیاده سازی شده و frame ها نود های اون هستن. با f_back به frame قبلی اشاره میکنن به راحتی وصل میشن و جدا میشن.
جنریتور ها با وجود سرعت خوبی که دارن، برای سرعت بیشتر ساخته نشدن بلکه برای استفاده بهینهتر از مموری ساخته شدن. داشتن همچین آبجکتی (به اضافه ساختار هایی مثل yield from) میتونه زمینه خیلی چیز ها رو فراهم کنه. از جمله فریموورک هایی مثل asyncio :)
👤 SorousH
💎 Channel: @DevelopixPython⭕️ کمتر از ۲ هفته تا شروع دورهی محبوب و تخصصی ماشینلرنینگ آکادمی آمانج باقی مونده!
⚠️ جای ۷نفر از شما در دوره ما خالیه!
🎁 برای اعضای پیج یه کد تخفیف ۴۰۰ هزار تومانی در نظر گرفتیم: ml4
💰قیمت دوره: ۵.۹ میلیون تومان
(امکان پرداخت قسطی هم وجود داره)
🧑🏫مدرس دوره: دکتر ریحانی مدیر فنی نوسازان، دیتاساینتیست و دکتری کامپیوتر دانشگاه تهران
⏰ شروع دوره: ۱۵ دی ماه ۱۴۰۲ (جمعهها ۱۵-۱۱)
📊 ۵۵ ساعت آموزش مقدماتی تا پیشرفته
📍ویژگیهای دوره:
✔️هر هفته وبینار برگزار میشه و شما میتونید مستقیما با استاد تعامل داشتهباشید.
✔️ در پایان دوره، مدرک نمرهدار آکادمی آمانج بهتون داده میشه.
✔️ در طول دوره، پشتیبانهای فنی آمانج حواسشون به همه چیز هست تا بهترین تجربه رو در طول یادگیری داشته باشین.
✔️سرفصلهای دوره ماشین لرنینگ کاملا بهروز و مطابق با نیاز بازار کاره.
✔️بعد از پایان دوره میتونید در کامیونیتی تخصصی برنامهنویسی آمانج عضو بشید که حسابی به دردتون میخوره.
🌐 👈🏻برای اطلاعات بیشتر و ثبتنام کلیک کنید
@AmanjAdmin
09107603363
02191692911
☄️ بچه ها، اگر می خواهید پایتون کار حرفه ای باشید و با تکنولوژی های روز دنیا کار کنید و از برنامه نویس های معمولی خارجی عقب نیوفتید، همین الان برید توی چابکان و پروژهاتونو با جدیدترین تکنولوژی های روز دنیا و به آسونی با اعتبار رایگان بسازید.
(فرصتش محدوده بچه ها همین الان برید و هاست رایگانتونو ایجاد کنید)
https://bit.ly/47TbsEi
https://bit.ly/47TbsEi
https://bit.ly/47TbsEi
https://bit.ly/47TbsEi
@chabokan
💠 شده بخواید آیتمی رو که بیشتر از بقیه تکرار شده رو بگیرید؟ با کد بالا میتونید این کار رو انجام بدید.
#Tips
💎 Channel: @DevelopixPython
✔️ استیبل بودن یا نبودن یک الگوریتم مرتب سازی
یکی از دسته بندی های موجود برای الگوریتم هایsort کردن، فاکتور stable بودن یا نبودن هست. به طور خلاصه به الگوریتمی میگن stable که:
موقع sort کردن یک لیست، اگه ۲ تا آیتم مساوی هم بودن، دقیقا به همون ترتیبی که توی لیست اولیه بودن، توی لیست مرتب شده هم ظاهر بشن.
فرض کنید به شما میگن لیست زیر رو بر اساس: اول نمره و بعد درصورت یکسان بودن نمره ها، بر اساس حروف الفبا مرتب کنید. منتاها این لیستی که به شما میدن خودش بر اساس حروف الفبا مرتب شده هست:
lst = [
("Ashkan",17),
("Bahar",18),
("Sorena",17)
]
یک راه مرسوم اینه که به این روش sort رو انجام بدیم:
lst.sort(key=lambda x: (x[1], x[0]))
کاملا درسته و هیچ اشکالی نداره. بیشتر میخواستیم درباره موضوع پست صحبت کنیم.
آیا میتونیم فقط بیایم بر اساس آیتم دوم sort ش کنیم؟ این که خود لیست بر اساس حروف الفبا مرتب شده آیا کمکی میکنه؟ یعنی:
lst.sort(key=lambda x: x[1])
اگه بدونیم الگوریتمی که استفاده شده stable هست بله میتونیم و گارانتی هست که آیتم های مساوی به همون ترتیب در خروجی قرار میگیرن، و چون در حال حاضر بر اساس حروف الفبا مرتب شده هستن، اون افرادی که نمره ی برابر دارن اتوماتیک بر اساس حروف الفبا هم مرتب هستن.
خروجی هردو:
[
('Ashkan', 17),
('Sorena', 17),
('Bahar', 18)
]
پایتون از Tim Sort استفاده میکنه و stable هست.
چند تا از الگوریتم های مرتب سازی استیبل:
• Insertion Sort
• Merge Sort
• Bubble Sort
• Tim Sort
و نقطهی مقابلشون:
• Heap Sort
• Selection Sort
• Quick Sort
👤 SorousH
💎 Channel: @DevelopixPython💠 برای معکوس کردن یک رشته میتونید از کد بالا استفاده کنید.
#Tips
💎 Channel: @DevelopixPython
🔥طرح تخفیفی شرکت وان سرور به مناسبت دهمین سالگرد تاسیس:🔥
هاستینگ وان سرور ارائه دهنده با کیفیت ترین و ارزان ترین سرویس های سرور مجازی، سرور اختصاصی، هاست، دامین، گواهی SSL و ... به مناسبت دهمین سالگرد تاسیس این مجموعه و به پاس همراهی شما عزیزان از طرح تخفیفی زیر رونمایی می نماید:
💯10 کد تخفیف 100 درصدی برای خرید سرور مجازی انگلیس و هاست
💰50 کد تخفیف 50 درصدی برای خرید سرور مجازی هلند ، سرور مجازی فرانسه و هاست
💎50 کد تخفیف 20 درصدی برای خرید کلیه سرویس های سرور مجازی و هاست
🚨این تخفیف ویژه در تاریخ شنبه 6 آبان در کانال تلگرام این شرکت (https://t.me/one3erver) منتشر میشود و فقط 72 ساعت زمان برای استفاده از کد تخفیف ها دارید.🚨
❌لطفا جهت دریافت کد تخفیف کلیک کنید.❌
#سوال ✨
خروجی کد زیر چیست ⁉️
✍️ *ژنرال*
💎 Channel: @DevelopixPython
🔸 تا حالا شده بخواهید مقدار دو متغیر رو با همدیگه جابجا کنید؟
🔹 توی کد بالا با یه روش جالب این کار رو انجام میدهیم که دیگه نیاز نباشه برای این کار متغیر جدیدی ایجاد بکنید.
👤 MHReza
💎 Channel: @DevelopixPython
Repost from National Brain Mapping Lab
دوره جامع پيشرفته
💠“پردازش داده هاي علوم اعصاب با روش هاي يادگيري عميق مبتني بر پايتون”💠
🕑مدت دوره: ۲۱ ساعت (آنلاین)
🗓شروع دوره: پنجشنبه ۲۰ مهر ۱۴۰۲
مدرسان:
✅ دکتر احمد شالباف، دانشیار دانشگاه علوم پزشکی شهید بهشتی
✅ مهندس محسن شهابی، دانشجوی دکتری دانشگاه علوم پزشکی شهید بهشتی
✅ مهندس محسن صفار، دانشجوی دکتری دانشگاه تهران
♦️سطح دوره: پیشرفته♦️
🔸پيش نياز دوره :
☑️ آشنایی با هوش مصنوعی
☑️ آشنایی با روش های یادگیری ماشین
☑️ آشنایی با روش های یادگیری عمیق
☑️ آشنایی با پایتون
‼️ ظرفیت محدود ‼️
برای ثبت نام و کسب اطلاعات بیشتر
کلیک کنید.
🔸دیتا استراکچرهای پایتون در یک نگاه
🔗 Source
👤 MHReza
💎 Channel: @DevelopixPython
📥 دانلود کتاب
📚 Django Design Patterns and Best Practices
👤 MHReza
💎 Channel: @DevelopixPython
💠 معرفی کتاب 💠
💎 Django Design Patterns and Best Practices
📚 دانستن الگوهای مختلف میتواند زمان کد نویسی را تا حد زیادی کاهش دهد و عملکرد کد را افزایش دهد. نویسنده نهتنها الگوها را توضیح میدهد، بلکه با ارائه مثالها و راهحلها، مطمئن میشود که میدانید کجا و چه زمانی از هر الگوی استفاده کنید. این کتاب همچنین بهطور کامل تست و امنیت را پوشش میدهد که دو جنبه مهم توسعه هر برنامه وب هستند.
📖 سرفصلهای کتاب عبارتند از:
1️⃣ جنگو و الگوها
2️⃣ طراحی برنامه
3️⃣ مدلها
4️⃣ ویوها و URLها
5️⃣ قالبها
6️⃣ رابط ادمین
7️⃣ فرمها
8️⃣ کار کردن به صورت ناهمزمان
9⃣ ایجاد APIها
🔟 سر و کار داشتن با کد میراثی
1⃣1⃣ تست کردن و دیباگ کردن
2⃣1⃣ امنیت
3⃣1⃣ آمادگی برای محیط پروداکشن
📥 این کتاب را میتوانید از پیامی که در پایین این پست قرار دارد، دانلود کنید. همچنین این کتاب یک نسخه ترجمه آزاد را نیز داراست که میتوانید از این لینک گیتهاب به آن دسترسی داشته باشید.
#معرفی_کتاب
👤 MHReza
💎 Channel: @DevelopixPython
دایناسورها در حال خرید در تهران 🤯
⚡️هیچوقت فکرشو میکردی که همچین تصویری رو ببینی؟
⚡️از آینده به تو سلام 😁
💠این تصویر با استفاده از یک ابزار جدید در تلگرام ساخته شده که هر متنی بهش بدی رو تبدیل به عکس میکنه!
همینالان بهش پبام بده تا عکسش رو برات بفرسته😇
فقط کافیه بزنی رو آیدی زیر و شروع کنی 😉👇🏻
@aiolearn_artbot
🌀هوشمصنوعی با پیشرفت فوقالعادش داره همه دنیار رو فرا میگیره 😉🤯
Repost from کار و کسب، عادل طالبی 📌
📌 دوره آنلاین سئو برای مدیران، آخرین روز ثبتنام با تخفیف ویژه
🔘 استراتژی سئو
🔘 مدیریت فرآیندهای سئو
🔘 گزارشات سئو
🔘 ارزیابی و نظارت بر فرآیندهای سئو
🔘 اشتباهات سئو
🔘 قراردادهای سئو
این دوره پس از سه سال مجدداً برگزار میشود. در این دوره یاد میگیرید چگونه فرآیندهای سئو را مدیریت کنید. این دوره برای مدیران و صاحبان کسب و کارها مفید است که بدانند از تیم سئو چه بخواهند و چگونه از اجرای صحیح فرایندهای سئو اطمینان یابند. همچنین متخصصین سئو یاد میگیرند چگونه با کارفرمایان به شکل درست تعامل و همکاری کرده، به نیازهای آنها پاسخ صحیح بدهند.
پنج جلسه آموزش انلاین فشرده و تخصصی همراه با یک جلسه پرسش و پاسخ.
اطلاعات بیشتر و ثبتنام در ایسمینار:
🌐 eseminar.tv/wb116105
کد تخفیف: talebi
فقط امروز و فردا، به جای 5 میلیون تومان فقط با 2 میلیون تومان در این دوره آنلاین شرکت کنید.
هدایای شرکت در دوره:
🔘 حداقل 2 میلیون تومان رپورتاژ در تریبون
🔘 اکانت 6 ماهه جتسئو به ارزش 1.200.000 تومان
🔘 اکانت یک سالۀ سازمانی میزیتو به ارزش 2.900.000 تومان
🔘 یک جلد کتاب سئو 2022+2023 امضاء شده.
❌❌ فقط امروز ❌❌
☑️ @kar_kasb
📌 دوره آنلاین سئو برای مدیران، آخرین روز ثبتنام با تخفیف ویژه
🔘 استراتژی سئو
🔘 مدیریت فرآیندهای سئو
🔘 گزارشات سئو
🔘 ارزیابی و نظارت بر فرآیندهای سئو
🔘 اشتباهات سئو
🔘 قراردادهای سئو
این دوره پس از سه سال مجدداً برگزار میشود. در این دوره یاد میگیرید چگونه فرآیندهای سئو را مدیریت کنید. این دوره برای مدیران و صاحبان کسب و کارها مفید است که بدانند از تیم سئو چه بخواهند و چگونه از اجرای صحیح فرایندهای سئو اطمینان یابند. همچنین متخصصین سئو یاد میگیرند چگونه با کارفرمایان به شکل درست تعامل و همکاری کرده، به نیازهای آنها پاسخ صحیح بدهند.
پنج جلسه آموزش انلاین فشرده و تخصصی همراه با یک جلسه پرسش و پاسخ.
اطلاعات بیشتر و ثبتنام در ایسمینار:
🌐 eseminar.tv/wb116105
کد تخفیف: talebi
فقط امروز و فردا، به جای 5 میلیون تومان فقط با 2 میلیون تومان در این دوره آنلاین شرکت کنید.
هدایای شرکت در دوره:
🔘 حداقل 2 میلیون تومان رپورتاژ در تریبون
🔘 اکانت 6 ماهه جتسئو به ارزش 1.200.000 تومان
🔘 اکانت یک سالۀ سازمانی میزیتو به ارزش 2.900.000 تومان
🔘 یک جلد کتاب سئو 2022+2023 امضاء شده.
❌❌ فقط امروز ❌❌
☑️ @kar_kasb
📌 دوره آنلاین سئو برای مدیران، آخرین روز ثبتنام با تخفیف ویژه
🔘 استراتژی سئو
🔘 مدیریت فرآیندهای سئو
🔘 گزارشات سئو
🔘 ارزیابی و نظارت بر فرآیندهای سئو
🔘 اشتباهات سئو
🔘 قراردادهای سئو
این دوره پس از سه سال مجدداً برگزار میشود. در این دوره یاد میگیرید چگونه فرآیندهای سئو را مدیریت کنید. این دوره برای مدیران و صاحبان کسب و کارها مفید است که بدانند از تیم سئو چه بخواهند و چگونه از اجرای صحیح فرایندهای سئو اطمینان یابند. همچنین متخصصین سئو یاد میگیرند چگونه با کارفرمایان به شکل درست تعامل و همکاری کرده، به نیازهای آنها پاسخ صحیح بدهند.
پنج جلسه آموزش انلاین فشرده و تخصصی همراه با یک جلسه پرسش و پاسخ.
اطلاعات بیشتر و ثبتنام در ایسمینار:
🌐 eseminar.tv/wb116105
کد تخفیف: talebi
فقط امروز و فردا، به جای 5 میلیون تومان فقط با 2 میلیون تومان در این دوره آنلاین شرکت کنید.
هدایای شرکت در دوره:
🔘 حداقل 2 میلیون تومان رپورتاژ در تریبون
🔘 اکانت 6 ماهه جتسئو به ارزش 1.200.000 تومان
🔘 اکانت یک سالۀ سازمانی میزیتو به ارزش 2.900.000 تومان
🔘 یک جلد کتاب سئو 2022+2023 امضاء شده.
❌❌ فقط امروز ❌❌
☑️ @kar_kasb
💠 جواب
🔺در بسیاری از موارد اعداد با اعشار نیمه به سمت بالا گرد میشوند.
🔺اما در زبانهای برنامهنویسی مانند پایتون، تابع round به نحوی عمل میکند که ممکن است منجر به نتایج غیرمنتظره شود.
🔺بهویژه وقتی اعشار عدد برابر با 0.5 باشد، تابع round به سمت عدد صحیح زوج تقریب زده میشود.
🟢به عنوان مثال، در اینجا وقتی شما عدد 3.5 را به تابع round میدهید، انتظار دارید که به 4 گرد شود، اما این تابع باتوجه به قواعد خودش به سمت عدد زوج عدد تقریب میزند و خروجی نهایی 4 میشود.
🟢به همین دلیل، توصیه میشود در مواردی که نیاز به گرد کردن اعداد با اعشار کاملا دقیق دارید از از راه های دیگری استفاده کنید تا از اینگونه مشکلات جلوگیری کنید.
🟢مثلا میتوانید از توابعی مانند math.floor برای گرد کردن به سمت پایین و math.ceil برای گرد کردن به سمت بالا استفاده کنید تا نتایج دقیقتری به دست آورید.
🟡 برای اطلاعات بیشتر و مطالعه در این مورد، میتوانید به این منبع مراجعه کنید.
#سوال ✨
خروجی کد زیر چیست ⁉️
✍️ *ژنرال*
💎 Channel: @DevelopixPython
Conditional breakpoint
فرض کنید همچین کدی داریم:
for i in range(100):
print(i)
و دوباره فرض کنید زمانی که i میشه ۹۰ یه مشکلی بوجود میاد. میخواهیم برنامه رو دیباگ کنیم. چه کنیم؟ break point بذاریم سمت چپ for loop.
ولی موضوع این هست که دیباگر وقتی ران میشه همون ابتدا کنار for loop متوقف میشه و ما باید دستی جلو ببریم. تو این حالت i مساوی ۰ هست. منطقی نیست که ۹۰ بار روی next بزنیم تا برسیم به اون حالتی که i برابر ۹۰ میشه.
خوشبختانه یه چیزی به اسم conditional breakpoint وجود داره که میتونید بهش یه expression عه boolean بدید و دیباگر فقط زمانی متوقف میشه که اون expression درست باشه.
توی ادیتور دلخواهتون بعد از اینکه break point گذاشتین، راست کلیک کنید روش و edit رو بزنید (یا هر اسم دیگه ای که داره) و توی اون پنجره ای که باز میشه بنویسید:
i == 90حالا با زدن دکمه دیباگ فقط زمانی متوقف میشه که این شرط درست باشه. 👤 SorousH 💎 Channel: @DevelopixPython
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
