TGViewer
PyCoders (پایتون) PyCoders (پایتون) @python_rd · 4.11K subscribers
Post #2188 821
🔆 هیچ‌وقت از لیست یا دیکشنری خالی به عنوان مقدار پیش‌فرض (Default Value) توی توابع استفاده نکنید!

🔹وقتی در تعریف یک تابع در پایتون، مقداری مثل یک لیست ([]) یا دیکشنری ({}) را به‌عنوان مقدار پیش‌فرض قرار می‌دهید، پایتون این شیء را فقط یک‌بار (در زمان تعریف تابع و Load شدن کد) در حافظه می‌سازد.

🔹 از آنجایی که لیست‌ها و دیکشنری‌ها قابل تغییر (Mutable) هستند، اگر تابع را چند بار بدون پاس دادن ورودی جدید فراخوانی کنید، پایتون هر بار از همان شیء قدیمی در حافظه استفاده می‌کند. در نتیجه، تغییرات در فراخوانی‌های قبلی، روی فراخوانی‌های بعدی اثر می‌گذارد!

🔹 به جای این کد:
#در این کد، لیست users فقط یک‌بار ساخته می‌شود و تمام کاربران جدید به همان یک لیست اضافه می‌شوند.
def add_user(user_name, user_list=[]):
user_list.append(user_name)
return user_list

# فراخوانی اول
print(add_user("امیر"))
# خروجی: ['امیر']

# فراخوانی دوم (بدون پاس دادن لیست جدید)
print(add_user("سارا"))
# خروجی انتظار می‌رفت ['سارا'] باشه، اما میشه: ['امیر', 'سارا']

🔹 اینجوری بنویس:
#از None به عنوان مقدار پیش‌فرض استفاده می‌کنیم و داخل تابع بررسی می‌کنیم که اگر مقدار None بود، یک لیست جدید ایجاد شود.
def add_user(user_name, user_list=None):
if user_list is None:
user_list = [] # ایجاد لیست جدید در هر بار اجرای تابع

user_list.append(user_name)
return user_list

print(add_user("امیر")) # خروجی: ['امیر']
print(add_user("سارا")) # خروجی: ['سارا'] (کاملاً مستقل و درست!)

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