TGViewer
PyCoders (پایتون) PyCoders (پایتون) @python_rd · 4.11K subscribers
Post #2213 419
🔆 یکی از اشتباهات رایج و خطرناک توی پایتون، استفاده از ساختارهای تغییرپذیر مثل لیست یا دیکشنری به عنوان مقدار پیش‌فرض ورودی تابع هست که به Default Argument Trap معروفه. توی پایتون، مقادیر پیش‌فرض فقط یک‌بار موقع تعریف تابع ساخته میشن نه توی هر بار فراخوانی، بنابراین تمام فراخوانی‌ها به یک لیست مشترک توی حافظه ارجاع میدن و داده‌های قبلی ناخواسته حفظ میشن. راه استاندارد اینه که مقدار پیش‌فرض رو None بذاری و داخل بدنه تابع لیست جدید بسازی.

# روش غلط که باعث اشتراک حافظه میشه:
def add_item_wrong(item, target_list=[]):
target_list.append(item)
return target_list

print(add_item_wrong("Python")) # خروجی: ['Python']
print(add_item_wrong("Django")) # خروجی غیرمنتظره: ['Python', 'Django']

# روش درست و اصولی:
def add_item_correct(item, target_list=None):
if target_list is None:
target_list = []
target_list.append(item)
return target_list

print(add_item_correct("Django")) # خروجی درست: ['Django']

🐍 @python_rd
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 →