یه نکته جالب❗️
میدونستید تو پایتون اگر مقدار پیشفرض یک پارامتر از نوع تغییرپذیر (mutable) باشه، مثل لیست یا دیکشنری، این مقدار فقط یک بار زمان اجرای دستور def ارزیابی میشه؟ بعد از اون، هر بار تابع رو بدون دادن اون آرگومان فراخوانی کنیم، پارامتر به همان شیء قبلی اشاره میکنه و از نو ساخته نمیشه
مثال:
def add(item, items={}):
items[item] = 0
return items
print(add("1"))
print(add("2"))
print(add("3"))
خروجی:
{'1': 0}
{'1': 0, '2': 0}
{'1': 0, '2': 0, '3': 0}
چون {} فقط یک بار در زمان تعریف تابع ساخته شده و همون دیکشنری بین فراخوانیها باقی میمونه
برای دیدن این موضوع میتونیم id رو چاپ کنیم:
def add(item, items={}):
items[item] = 0
return id(items)
print(add("1"))
print(add("2"))
print(add("3"))
هر سه عدد یکی هستن، چون هر بار همون شیء دیکشنری برگردونده میشه
حالا اگر میخوایم هر بار مقدارمون خالی و تازه باشه چیکار کنیم؟
راه درست اینکه مقدار پیشفرض رو None بذاریم و داخل تابع، در صورت None بودن، دیکشنری جدید بسازیم:
def add(item, items=None):
if items is None:
items = {}
items[item] = 0
return items
یا اگر لازم نیست دیکشنری از بیرون به تابع پاس داده بشه، اون رو داخل خود تابع بسازیم:
def add(item):
items = {}
items[item] = 0
return items
@comma_code
@comma_code
#کاما_کد #فانکشن #پایتون
#function #mutable #comma_code #python
261 · پستیه نکته جالب❗️
25 سپتامبر 2026در همان حوالی فید
Iاین پیام
I