en
Feedback
| کانال توسعه‌دهندگان پایتون |

| کانال توسعه‌دهندگان پایتون |

Open in Telegram

⭕️ کانال توسعه‌دهندگان پایتون دولوپیکس 💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی 💎 @Developix 🚀 Developix.ir 📌 پشتیبانی و تبلیغات: @DevelopixSupport

Show more
7 449
Subscribers
+1524 hours
+287 days
+12530 days
Posts Archive
زیبایی بهتر از زشتی است مثال بارز از رعایت این اصل را در سینتکس پایتون مشاهده می‌کنیم و در زمان نوشتن کد نیز باید به آن توجه شود. با توجه به اینکه هر فرد می‌تواند تعریف متفاوتی از زیبایی داشته باشد، یک الگوی زیبایی که مورد قبول همه واقع شود وجود ندارد، اما پایبندی به یک الگوی مشخص بهبود ظاهر کد را به دنبال دارد. • وضاحت بهتر از ابهام است کد باید اهداف و مقاصد خود را به وضاحت و صراحت بیان کند و از هرگونه پیچیدگی و ابهام در نوشتن کد خودداری گردد. نوشتن کامنت، داک استرینگ، تعریف تایپ، استفاده از اسم‌های مناسب و پیروی از یک الگوی مشخص به وضاحت کد افزوده می‌شود.
python
# Implicit ❌
def area(l, w):
    return l * w

# Explicit ✅
def calculate_rectangle_area(length, width):
    return length * width
در این مثال، نامگذاری مناسب تابع و پارامتر ها به وضوح هدف تابع را نشان میدهد. اضافه کردن داک استرینگ و تعریف تایپ برای پارامتر ها و خروجی نیز باعث وضاحت بیشتر خواهد شد. • سادگی بهتر از پیچیدگی و پیچیدگی بهتر از بهم ریختگی است روش‌های ساده بیشتر اوقات بهتر و سودمندتر هستند و باید بجای روش‌های پیچیده استفاده شوند. اما بعضی موضوعات اساساً پیچیده هستند و پیاده‌سازی آن‌ها با روشی ساده امکان‌پذیر نیست. در این صورت، بهتر است این پیچیدگی با حفظ نظم پیاده‌سازی شوند تا از بهم ریختگی جلوگیری شود. نمونه بارز آن استفاده از list comprehension است که هرچند روشی پیچیده هستند اما مانع بهم ریختگی می‌شوند.
python
# Complex ❌
result = []
for i in range(10):
    if i % 2 == 0:
        result.append(i)

# Complex but organized ✅️
result = [i for i in range(10) if i % 2 == 0]
در این مثال، روش دوم از list comprehension استفاده کرده که باعث می‌شود کد کوتاه‌تر و خواناتر شود، در حالی که روش اول با استفاده از حلقه و شرط‌ها بهم ریختگی بیشتری دارد و پیچیده‌تر به نظر می‌رسد. • مسطح و هموار بهتر از تو در تو است (تنها در این مورد 🙄) نوشتن کد به صورت تو در تو باعث ناخوانا شدن برنامه می‌شود و بهتر است کدها تا حد امکان به صورت مسطح و کم عمق نوشته شوند.
# Nested ❌
if x > 0:
    if y > 0:
        if z > 0:
            ...

# Flat ✅️
if x > 0 and y > 0 and z > 0:
    ...
• پراکندگی بهتر از تراکم است در عین حال، نوشتن کد به صورت هموار و مسطح نباید باعث تراکم کد در یک خط شود و هر کد باید فضای کافی داشته باشد تا خوانایی و زیبایی کد حفظ شود.
# Dense ❌
if x > 0: print("Positive"); print("Check done")

# Sparse ✅️
if x > 0:
    print("Positive")
    print("Check done")
خوانایی مهم است کدها باید به گونه‌ای پیاده‌سازی شوند که دیگران به آسانی بتوانند آن‌ها را بخوانند و درک کنند. به همین دلیل، سینتکس پایتون مشابه به زبان گفتاری انسان است. همچنین، پایبندی به اصول یادشده، مانند سادگی، وضاحت، و مسطح بودن کد، باعث افزایش خوانایی کد می‌شود. • موارد خاص آنقدری خاص نیستند که قوانین را نقض کنند، اما سودمندی بر قوانین غلبه دارد! در برنامه‌نویسی همیشه یک تعداد اصول و قوانین خاص وجود دارد که پیش آمدن موارد خاص نباید باعث نقض قوانین شود. هرچند بیش از حد اصولی بودن ممکن است همیشه سودمند نباشد. به عنوان یک مثال بارز از بیش از حد اصولی بودن می‌توان به زبان برنامه‌نویسی جاوا اشاره کرد، پیروی دائم این زبان از اصول شی گرایی باعث شده است که پیاده‌سازی کوچک‌ترین برنامه‌ها نیز به مقدار زیادی از کد داشته باشند. به همین دلیل، نیاز است تعادل میان این دو اصل حفظ شود. بهترین رویکرد این است که به اصول پایبند باشیم، اما در همان زمان، سعی کنیم که سودمندی کد نیز در نظر گرفته شود. (پایبند به اصول باش اما تا زمانی که سودمنده 🤓☝️) 🔖 #Python, #پایتون 👤 xin 💎 Channel: @DevelopixPython

ادبیات زبان پایتون | The Zen of Python ‏"Zen of Python" مجموعه‌ای از بیست اصل است که طراحی زبان برنامه نویسی پایتون بر مبنای
ادبیات زبان پایتون | The Zen of Python ‏"Zen of Python" مجموعه‌ای از بیست اصل است که طراحی زبان برنامه نویسی پایتون بر مبنای آن صورت گرفته. این اصول به دو مفهوم اصلی "خوانایی" و "سادگی" تأکید دارند. این اصول در ابتدا به صورت قواعد شفاهی میان توسعه دهندگان اصلی پایتون وجود داشت و چندین سال بعد به طور اتفاقی توسط یکی از توسعه دهندگان اصلی پایتون "Tim Peters" در قالب شعر و طنز نوشته شد و در مستندات پایتون (PEP 20) نیز قرار گرفت. یکی از دلایل نوشتن این اصول زمانی بوجود آمد که حدادوا بیست سال قبل برنامه‌نویسان زیادی با اصول و ایدئولوژی‌های مختلف از زبان‌های دیگر به دنیای پایتون هجوم آوردند. اما این اصول و ایده‌ها با اساس طراحی پایتون در تضاد بود، و همین علت باعث شد اصول طراحی پایتون در چهارچوب این بیست قانون نوشته شود و برنامه‌نویسان را با اصول برنامه‌نویسی و طراحی این زبان آشنا سازد. در ادامه به توضیح این اصول پرداخته شده: 🔖 #Python, #پایتون 👤 xin 💎 Channel: @DevelopixPython

🌾 Rye: a Hassle-Free Python Experience 💡 رای (چاودار) یا همان Rye یک ابزار خیلی کاربردی، کامل و یکپارچه برای مدیریت پروژه‌ها و پکیج های پایتونیه. این ابزار توسط آقای Armin Ronacher توسعه داده شده و مدتیه که توجه افراد زیادی رو به خودش جلب کرده. برنامه‌نویس ها غالبا از ابزار های مشابهی مثل poetry برای این منظور استفاده میکردند اما به دلایلی میشه همه رو کنار گذاشت و به سمت Rye اومد. بعضی از این ویژگی ها عبارتند از: ⬅️ سادگی و سهولت ⬅️ از شروع فرایند نصب تا موقع کار کردن با این ابزار، شما هیچ‌گونه پیچیدگی خاصی نمی‌بینید. ⬅️ سرعت و عملکرد بهتر ⬅️ این ابزار با زبان rust نوشته شده و سرعتی به مراتب بیشتر از ابزار های دیگه ای مثل poetry داره. ⬅️ مدیریت محیط مجازی (virtual environment) ⬅️ هم در ایجاد و هم در مدیریت محیط مجازی این ابزار همراه شماست. ⬅️ دستورات ساده و ابزار ها ⬅️ همونطور که در داکیومنت اون میتونید ببینید، Ray شامل ابزار و دستوراتی هست که کار با اون رو به شدت آسون کرده. ❗️ برای آشنایی پیدا کردن بیشتر در مورد نصب و استفاده از این ابزار میتونید به این صفحه مراجعه کنید. ✍️ *ژنرال* 💎 Channel: @DevelopixPython

#سوال ✨ خروجی کد زیر چیست ⁉️ ✍️ *ژنرال* 💎 Channel: @DevelopixPython
#سوال ✨ خروجی کد زیر چیست ⁉️ ✍️ *ژنرال* 💎 Channel: @DevelopixPython

💢 معرفی فریمورک DJango جنگو یک فریمورک پایتون برای ساخت اپلیکیشن های وب است و از معماری MVC استفاده می‌کند تا کدها تمیزتر، ک
💢 معرفی فریمورک DJango جنگو یک فریمورک پایتون برای ساخت اپلیکیشن های وب است و از معماری MVC استفاده می‌کند تا کدها تمیزتر، کارآمدتر و کم‌تر شوند. هدف اصلی جنگو ساخت آسان سایت‌ های پیچیده و وابسته به دیتابیس است و بر پایه قابلیت استفاده مجدد و قابل اتصال بودن اجزای مختلف و توسعه سریع طراحی شده‌ است؛ از وب‌سایت ‌های مشهوری که از جنگو استفاده می‌کنند می‌توان به اینستاگرام، یوتیوب و سرویس های گوگل اشاره کرد. مزایای جنگو به‌طور خلاصه :‌ - افزایش سرعت برنامه‌نویسی - کارایی بالا و امکان توسعه - امنیت مطلوب 🔖 #Python, #پایتون 👤 Maryam 💎 Channel: @DevelopixPython

✨فریلنسر ها دو دسته هستن : 1️⃣ یا با فریلنسری بین المللی آشنایی ندارن 2️⃣ یا از شرایطی که بخاطر تحریم به وجود اومده ناامید شد
✨فریلنسر ها دو دسته هستن : 1️⃣ یا با فریلنسری بین المللی آشنایی ندارن 2️⃣ یا از شرایطی که بخاطر تحریم به وجود اومده ناامید شدن و سمتش نمیرن؛ ⚠️ شرایطی مثل نحوه ساخت اکانت در پلتفرم ها ، جذب پروژه ، تکمیل پروفایل و احراز هویت ، داشتن حساب خارجی و نقد کردن درآمد ✅ خبر خوب این هست که جزو هرکدوم ازین دسته ها باشی ، میتونی با خیال راحت وارد بازار کار بین المللی بشی ، پروژه بگیری و به راحتی درآمدت رو نقد کنی✨ ⁉️ چجوریشو از کسی که تجربه چندین ساله ی فریلنسری داره بشنو در یک جلسه یک ساعته رایگان 📆زمان: روز یکشنبه ساعت ۱۹ 🌐لینک ثبت نام: https://links.etekanesh.com/frl3tidvpx 🆔 کانال افراد موفق: https://t.me/TekaneshAcademy پشتیبانی در صورت بروز مشکل در ورود به جلسه: @Academy_Tekanesh

#سوال ✨ خروجی کد زیر چیست ⁉️ ✍️ *ژنرال* 💎 Channel: @DevelopixPython
#سوال ✨ خروجی کد زیر چیست ⁉️ ✍️ *ژنرال* 💎 Channel: @DevelopixPython

⚠️از بالا رفتن قیمت دلار لذت ببر.⚠️ 🛑 عجیب و غریب هم نیست. فقط به جای کارفرمای ایرانی با کارفرمای خارجی کار کن. چجوریشم بیا از کسی که تجربه داره و الان برای صدها نفر کارآفرینی کرده بپرس. 📆یکشنبه ۱۴۰۳/۰۲/۲۳ ⏰ساعت ۱۹:۰۰ وبینار رایگان چالش های کار با کارفرمای خارجی 🚨🎁راستی به مناسبت تولد تکانش کلی خبرها و هدایای هیجان انگیز هم دارن که فقط سالی یه بار اتفاق میوفته.🎁🎂 لینک ثبت نام وبینار: https://links.etekanesh.com/dgpXlSf3Cd 👨‍💻مدرس: علیرضا قیمتی پشتیبانی: @Tekanesh_support کانال تلگرام: https://t.me/TekaneshAcademy

💠یک منبع خوب برای پیدا کردن آشنایی اجمالی (و صدالبته کاربردی) با کتابخانه های مطرح Numpy و Pandas در پایتون. ⬅️ نام‌پای / Nu
💠یک منبع خوب برای پیدا کردن آشنایی اجمالی (و صدالبته کاربردی) با کتابخانه های مطرح Numpy و Pandas در پایتون. ⬅️ نام‌پای / Numpy: ⬅️ توضیح ماهیت آرایه ها ⬅️ نحوه پیاده سازی آرایه ها در Numpy ⬅️ نحوه ایجاد/تولید آرایه ها به روش های متفاوت ⬅️ آشنایی به method های کاربردی مرتبط به آرایه‌ها ⬅️ آشنایی با عملگر های کاربردی و نحوه اعمال‌سازی/استفاده آنها بر آرایه ها (مسائل ساده ماتریس‌ها) ⬅️ پانداس / Pandas: ⬅️ آشنایی با سری ها ⬅️ معرفی method های مرتبط به سری ها ⬅️ آشنایی با data frame ها و نحوه ایجاد آنها ⬅️ توضیحاتی در مورد انوع راه های slicing و اصطلاحا برش قسمتی از data frame ها 🔗 دانلود در پست بعد 💎 Channel: @DevelopixPython

#سوال ✨ خروجی کد زیر چیست ⁉️ ✍️ *ژنرال* 💎 Channel: @DevelopixPython
#سوال ✨ خروجی کد زیر چیست ⁉️ ✍️ *ژنرال* 💎 Channel: @DevelopixPython

💠 String Methods 🔺 در ادامه با مجموعه‌ای از method های مفید و قدرتمند برای کار با رشته‌ها در زبان برنامه‌نویسی پایتون آشنا خواهید شد. این methodها امکانات بسیاری را برای شما فراهم می‌کنند که می‌توانید از آنها برای جستجوی الگوها، جایگزینی متن، تبدیل حالت رشته و ... استفاده کنید. 🔺 capitalize() -> str 🔹 یک کپی از رشته برمی گرداند با این تفاوت که حرف اول رشته با "حروف بزرگ" نوشته می شود.
>>> "string methods".capitalize()
'String methods'
🔺 lower() -> str 🔹 یک کپی از رشته برمی گرداند با این تفاوت که تمام حروف با "حروف کوچک" نوشته می شود.
>>> "STRING METHODS".lower()
'string methods'
🔺 casefold() -> str 🔹 یک کپی از رشته برمی گرداند با این تفاوت که تمام حروف با "حروف کوچک" نوشته می شود.
>>> "STRING METHODS".casefold()
'string methods'
🔻 سوالی که اینجا مطرح میشه اینه که متد casefold و lower دقیقا به یک شکل عمل می کنند. پس چه تفاوتی بین این دو متد وجود داره؟ در پاسخ به این سوال باید گفته که متد casefold قوی تر از lower عمل می کنه (در واقع کاراکتر های بیشتری رو پوشش میده). برای مثال در آلمانی حرف کوچک 'ß' میشه "ss" ولی متد lower قادر به انجام این کار نیست.
>>> "ß".lower()
'ß'
>>> "ß".casefold()
'ss'
🔺 center(width, [fillchar]) -> str 🔹 با استفاده از این متد می توانید برای متن width مشخص کنید. در صورتی که width مشخص شده بزرگتر از طول رشته باشد به جای آن space قرار می گیرد که می توانید با استفاده از پارامتر دوم این مقدار را تغییر دهید و مقدار دلخواه را به جای آن قرار دهید.
>>> "string".center(10, "+")
'++string++'

>>> "string".center(10)
'  string  '
🔺 count(value[, start[, end]]) -> int 🔹 با تنظیم کردن value برای این متد تعداد دفعات مقدار تکرار شده در یک متن بر گردانده می‌شود. با استفاده از دو پارامتر دیگر می توانید نقطه شروع و پایان را مشخص کنید.
 >>> "string methods".count("t")
2
>>> "string methods".count("t", 2)
1
>>> "string methods".count("t", 2, 3)
0
🔺 endswith(suffix[, start[, end]]) -> bool 🔹 این متد بررسی می‌کند که آیا یک رشته با مقدار داده شده ختم می شود یا نه. با تنظیم کردن مقدار start و end می توانید شروع و پایان جستجو را مشخص کنید.
>>> "string methods".endswith("ds")
True
>>> "string methods".endswith("ds", 5)
True
>>> "string methods".endswith("ds", 5, 7)
False
🔺 find(sub[, start[, end]]) -> int 🔹 برای بررسی وجود و یا عدم وجود یک مقدار در یک رشته. در صورت وجود، ایندکس آن آیتم را بر می‌گرداند و در غیر اینصورت مقدار -1 برگردانده می‌شود.
>>> "string methods".find("s")
0
>>> "string methods".find("#")
-1
>>> "string methods".find("s", 5)
13
🔺 join(iterable) -> list 🔹 برای تبدیل iterable به str استفاده می شود.
>>> ",".join("string")
's,t,r,i,n,g'
>>> ",".join(["1","2","3"])
'1,2,3'
>>> ",".join({"1","2","3"})
'3,2,1'
>>> ",".join({"1" : 1, "2" : 2})
'1,2'
🔺 replace(old, new[, count]) -> str 🔹 برای جایگزین کردن یک مقدار (old) با مقدار دیگر (new) مورد استفاده قرار می گیرد. با استفاده از count می توانید تعداد دفعات اعمال تغییرات را مشخص کنید.
>>> "hi-hi-hi".replace("hi", "hey")
'hey-hey-hey'
>>> "hi-hi-hi".replace("hi" , "hey", 2)
'hey-hey-hi'
>>> "hi-hi-hi".replace("hi", "hey", 1)
'hey-hi-hi'
🔺 split(sep=None, maxsplit=-1) -> list 🔹 برای تبدیل str به لیست مورد استفاده قرار می گیرد. با استفاده از مقدار sep معیار تفکیک را مشخص می کنید (به مثال ها دقت کنید) و با استفاده از maxsplit حداکثر تعداد جدا کردن مقادیر را مشخص کنید.
>>> "hi-hi-hi".split()
['hi-hi-hi']
>>> "hi hi hi".split()
['hi', 'hi', 'hi']
>>> "hi-hi-hi".split("-")
['hi', 'hi', 'hi']
>>> "hi-hi-hi".split("-", 1)
['hi', 'hi-hi']
>>> "hi hi hi".split(maxsplit=1)
['hi', 'hi hi']
👤 ȺʍìɾⱮօհąʍʍąժ 💎 Channel: @DevelopixPython

#سوال ✨ خروجی کد زیر چیست ⁉️ ✍️ *ژنرال* 💎 Channel: @DevelopixPython
#سوال ✨ خروجی کد زیر چیست ⁉️ ✍️ *ژنرال* 💎 Channel: @DevelopixPython

✨با آرزوی سالی شاد و پر برکت برای شما عزیزان✨ ⚙به پاس همراهی شما عزیزان از امروز تا ۱ فروردین ۱۴۰۳ میتوانید از تخفیفات هیجان
✨با آرزوی سالی شاد و پر برکت برای شما عزیزان✨ ⚙به پاس همراهی شما عزیزان از امروز تا ۱ فروردین ۱۴۰۳ میتوانید از تخفیفات هیجان انگیز ما استفاده کنید.⚙ 💯تخفیفات 💯 50 درصد هاست فروشگاهی➡️ 50 درصد سرور مجازی هلند➡️ 20 درصد هاست ایران➡️ 20 درصد سرور مجازی انگلیس➡️ 200 گیگ ترافیک سرور مجازی ایران➡️ 🖥 برای مشاهده کلیک کنید 🌐@One3erver

🔴 شتابان هاست 🔴 🔰 تخفیف ویژه 12 درصدی برای خرید انواع🔹هاست🔹سرور در شتابان هاست به مناسبت فرا رسیدن عید نوروز 🥳: ✅ https
🔴 شتابان هاست 🔴 🔰 تخفیف ویژه 12 درصدی برای خرید انواع🔹هاست🔹سرور در شتابان هاست به مناسبت فرا رسیدن عید نوروز 🥳: https://shetabanhost.com/ 🌟 کد تخفیف اختصاصی:
shetabanhost
🔗 https://shetabanhost.com/ 🌐 پشتیبانی ۲۴ ساعته شتابان هاست👇👇 ☎️ 024-91311031 💎 Channel: @shetabanhostcom

🔸 Python Ethical Hacking کتابی که اخیرا به صورت کلی مطالعه کردم، کتابی جالب در زمینه هک با استفاده از زبان برنامه‌نویسی پایتون است. در بخش اول درمورد مفاهیم اولیه از جمله TCP، OSI، Types of hackers و ... صحبت می‌شود که اگر با این مفاهیم آشنا هستید می‌توانید از بخش2-قسمت4 کتاب شروع به مطالعه کنید. از جمله مواردی که در کتاب پوشش داده شده، حمله Arp Spoofing می‌باشد که با بهره‌گیری از کتابخانه scapy، یک بدافزار برای بوجود آوردن اختلال در اتصال اینترنت هدف نوشته شده است. همچنین، توضیحات جامعی نیز درباره اجرای حمله MITM نیز در این کتاب ارائه شده. درکنار موارد ذکر شده، یاد خواهید گرفت که چطور با استفاده از این زبان یک بدافزار توسعه بدهید، مکانیزم های امنیتی متوقف‌کننده بدافزار را دور بزنید، چطور پسورد کرک کنید و دیگر اقدامات مربوط به این حوزه را انجام دهید. 👤 ȺʍìɾⱮօհąʍʍąժ 💎 Channel: @DevelopixPython

DragonCloud - دراگون کلود ارائه خدمات سرور مجازی و اختصاصی با بهترین سخت افزار های موجود و شبکه ای قدرتمند - استفاده از پرداز
DragonCloud - دراگون کلود ارائه خدمات سرور مجازی و اختصاصی با بهترین سخت افزار های موجود و شبکه ای قدرتمند - استفاده از پردازنده core i9 14900k - رم های DDR5 - حافظه های NVMe جهت دریافت اطلاعات بیشتر و خرید عضو شوید👇🏽 @DragonCloud_ir

درود. میخواستم درباره ی آبجکت معروف و شناخته شده ی 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