提问人:Kraken 提问时间:4/9/2023 最后编辑:TomerikooKraken 更新时间:4/9/2023 访问量:102
解决方法:Python 中的可变默认参数
Workaround Mutable Default Arguments in 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
因此,在第二个示例中,我们不绑定到任何内容(即 ),因此在多次调用时,我们始终将其设置为 。
所以我的问题是,为什么我们甚至在第二个例子中需要 if 语句,它不会总是正确的吗?L
None
None
if L is None
答:
1赞
Lecdi
4/9/2023
#1
不,这并不总是正确的。 是 的默认参数,但并不总是 。该函数允许调用方输入自己的列表。如果删除了 ,则始终被空列表替换,即使调用方尝试将不同的列表传递给函数也是如此。None
L
None
if
L
评论