python - 函数中的默认值

标签 python

以下警告位于 Python 文档的“函数参数中的默认值”部分。

重要警告:默认值仅计算一次。当默认值是可变对象(例如列表、字典或大多数类的实例)时,这会产生影响。例如,以下函数会累积在后续调用中传递给它的参数:

def f(a, L=[]):
    L.append(a)
    return L

print(f(1))
print(f(2))
print(f(3))

这将打印

[1]

[1, 2]

[1,2,3]

如果您不希望在后续调用之间共享默认值,您可以这样编写函数:

def f(a, L=None):
    if L is None:
        L = []
    L.append(a)
    return L

我不太明白代码的 L=None 部分是如何解决这个问题的。你能帮我理解一下吗?谢谢

最佳答案

None 是不可变的,这意味着它不能更改。因此,如果将 None 设置为参数的默认值,则每次函数调用时它总是相同的,并且将一个新的空列表设置为 L (因为它每次都会评估,而不仅仅是第一次调用该函数)。

进一步阅读:http://effbot.org/zone/default-values.htm

关于python - 函数中的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61424737/

相关文章:

python - Python 中没有足够的参数错误,我应该怎么做才能解决这个问题?

python - Flask/Jinja 列表中的下拉菜单

Python 字典未返回所有项目

python3 -c 带有长 cmd 字符串 : Trying to resolve invalid syntax

python - 如何在Python Pandas中创建一个减少重复代码的函数

python - 在 Python 中绘制回归线、置信区间和预测区间

python - 去除 jinja2 和 flask 中的空格......为什么我还需要减号?

python - 类型错误:无法将序列乘以 'tuple' 类型的非 int

python - 使用 Python 将 Google Sheet 下载为 CSV,生成只有一行的 CSV

python - 错误 : Double requirement given: Pillow==6. 1.0(来自 -r requirements.txt(第 25 行))