یه نکته جالب❗️
میدونستید تو پایتون اگر مقدار پیشفرض یک پارامتر از نوع تغییرپذیر (mutable) باشه، مثل لیست یا دیکشنری، این مقدار فقط یک بار زمان اجرای دستور def ارزیابی میشه؟ بعد از اون، هر بار تابع رو بدون دادن اون آرگومان فراخوانی کنیم، پارامتر به همان شیء قبلی اشاره میکنه و از نو ساخته نمیشه
مثال:
خروجی:
چون {} فقط یک بار در زمان تعریف تابع ساخته شده و همون دیکشنری بین فراخوانیها باقی میمونه
برای دیدن این موضوع میتونیم id رو چاپ کنیم:
هر سه عدد یکی هستن، چون هر بار همون شیء دیکشنری برگردونده میشه
حالا اگر میخوایم هر بار مقدارمون خالی و تازه باشه چیکار کنیم؟
راه درست اینکه مقدار پیشفرض رو None بذاریم و داخل تابع، در صورت None بودن، دیکشنری جدید بسازیم:
یا اگر لازم نیست دیکشنری از بیرون به تابع پاس داده بشه، اون رو داخل خود تابع بسازیم:
@comma_code
@comma_code
#کاما_کد #فانکشن #پایتون
#function #mutable #comma_code #python
میدونستید تو پایتون اگر مقدار پیشفرض یک پارامتر از نوع تغییرپذیر (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
❤6🔥1