当前位置:首页python > 正文

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
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
  • Python 技巧:函数默认参数与可变对象陷阱
  • 相关推荐

    最新推荐

    热门点击