[英]do not understand closures question in python
def a(b=[]):
b.append(1)
return b
print a()
print a()
我突然得到了一张2元的名单,但是如何? 不应该每次都被设置为空列表。
谢谢您的帮助
定义函数时,默认参数仅计算一次。 它保留了从一次调用到下一次调用的相同对象,这意味着相同的列表会一直被追加到。 使用默认值None
,如果你想解决这个问题,请检查它。
与闭合无关,至少不是通常意义上的闭合。
b
的默认值不是“新的空列表”; 它是“我在创建函数时刚刚创建的这个特定对象,将其初始化为空列表”。 每次在没有参数的情况下调用函数时,都会使用相同的对象。
由于其他答案中给出的原因,更正后的版本是:
def a(b=None):
b = [] if b is None else b
b.append(1)
return b
定义函数时,不会在每次调用函数时评估(一次)默认参数。
试试这个:
def a(b=None):
if b is None
b = []
b.append(1)
return b
print a()
print a()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.