有时,有一个空列表的默认参数似乎很自然。然而,Python produces unexpected behavior in these situations .
例如,考虑这个函数:
def my_func(working_list=[]):
working_list.append("a")
print(working_list)
第一次调用时,默认值将起作用,但之后的调用将更新现有列表(每次调用一个“a”
)并打印更新的版本。
如何修复该函数,以便在没有显式参数的情况下重复调用该函数时,每次都会使用新的空列表?
最佳答案
def my_func(working_list=None):
if working_list is None:
working_list = []
# alternative:
# working_list = [] if working_list is None else working_list
working_list.append("a")
print(working_list)
The docs假设您应该使用 None
作为默认值并明确 test for it在函数体内。
关于python - 如何避免由 Python 的早期绑定(bind)默认参数(例如可变默认参数 "remembering"旧数据)引起的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56310243/