python - 如何避免由 Python 的早期绑定(bind)默认参数(例如可变默认参数 "remembering"旧数据)引起的问题?

标签 python default-parameters

有时,有一个空列表的默认参数似乎很自然。然而,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/

相关文章:

python - 如何在 Python 中正确使用 opencv.imread 的参数 `flags`?

c# - 默认参数和泛型的方法解析问题

javascript - React 组件状态的默认函数参数值

c++ - 多个默认可选值

python - pandas 和 rpy2 : Why does ezANOVA work via robjects. r 但不是 robjects.packages.importr?

python - 使用 pyvips 连接多个巨大的图像

python - 有没有办法通过将 python 列表快速转换为 numpy 矩阵来搜索列表?

python - 转义任意代码块

python - 了解 Python 风格,函数的默认参数

c++ - 使用派生类实例作为默认参数值