TGViewer
PyCoders (پایتون) PyCoders (پایتون) @python_rd · 4.1K subscribers
Post #2209 543
🔆 کارایی و ساختار | پدیده Late Binding در Lambdaهای پایتون


🔹 تا حالا شده توی یک حلقه چندتا لمداسازی (Lambda) کنی و موقع اجرا ببینی همه با هم یک جواب تکراری میدن؟! این دقیقاً به خاطر پدیده Late Binding (ارزیابی دیرهنگام) در پایتونه.


🔹 کد مشکل‌دار:

funcs = [lambda: i for i in range(3)]

for f in funcs:
print(f()) # خروجی: 2, 2, 2 !

🔹 دلیلش چیه؟
پایتون مقدار متغیر i رو موقع تعریف لمدا ذخیره نمی‌کنه، بلکه موقع اجرا (Call) به سراغ مقدار نهایی i توی حافظه می‌ره!


🔹 راه حل استاندارد (با استفاده از Default Argument):

funcs = [lambda x=i: x for i in range(3)]

for f in funcs:
print(f()) # خروجی: 0, 1, 2 (درست شد!)

🔹 به چه دردی میخوره؟
این باگ توی پروژه‌های واقعی (مثل ساخت Callback برای دکمه‌های UI یا تعاریف Dynamic توی دیتابیس و کارهای Async) خیلی زیاد اتفاق می‌افته و فهمیدنش جلوی ساعت‌ها دیباگینگ گیج‌کننده رو می‌گیره.

🐍 @python_rd
  • ❤ 1
More from @python_rd
  1. Oct 13, 2026کوییز پایتون 🔆 خروجی اجرای کد زیر چیست؟ t = (1, 2, [3, 4]) try: t[2] += [5] except TypeEr…
  2. Oct 13, 2026🔆 راز مکانیزم پیاده‌سازی و تغییر جهت NaN در الگوریتم مرتب‌سازی پایتون (Timsort) 🔹 باگ ری…
  3. Oct 13, 2026🔆 حذف تاریخی GIL از پایتون (Free-threaded Python) 🔹 یک رویداد تاریخی: حذف قفل مفسر (GIL)…
  4. Oct 11, 2026🔆 مدیریت تمیز منابع با Context Managerهای سفارشی (contextlib) 🔹 ساخت Context Managerها م…
  5. Oct 10, 2026🔆 چرا برای داده‌های حجیم نباید از return استفاده کنی؟ 🔹 وقتی یک تابع لیست بزرگی از داده‌…
  6. Oct 10, 2026🔆 خروجی این تکه کد چیه؟ def add_item(item, lst=[]): lst.append(item) return lst print(add…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →