Python 技巧:函数默认参数与可变对象陷阱
作者:野牛程序员:2025-12-22 11:02:11python阅读 1990
Python 技巧:函数默认参数与可变对象陷阱
# /* # Python 技巧:函数默认参数与可变对象陷阱 # -------------------------------------------------------- # 概念: # 在 Python 中,函数参数的默认值在函数定义时被计算一次, # 而不是每次调用函数时重新计算。 # 如果默认值是可变对象(如 list、dict),多次调用函数可能共享同一个对象。 # # 问题示例: # */ def append_item(value, lst=[]): lst.append(value) return lst print(append_item(1)) # 输出 [1] print(append_item(2)) # 输出 [1, 2] ← 与预期不同 print(append_item(3)) # 输出 [1, 2, 3] ← 与预期不同 # -------------------------------------------------------- # 正确做法:使用 None 作为默认值,再在函数内部创建新对象 def append_item_safe(value, lst=None): if lst is None: lst = [] lst.append(value) return lst print(append_item_safe(1)) # 输出 [1] print(append_item_safe(2)) # 输出 [2] print(append_item_safe(3)) # 输出 [3] # -------------------------------------------------------- # 要点总结: # 1) 函数默认值在定义时计算,仅执行一次; # 2) 可变对象作为默认值会导致跨调用共享同一对象; # 3) 推荐使用 None 作为默认值,并在函数内部创建新对象; # 4) 不可变对象(int、str、tuple)则不会有此问题。 # */ # # [1] # [1, 2] # [1, 2, 3] # [1] # [2] # [3]
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

