这是一个函数。我的目的是使用关键字参数默认值使字典成为空字典(如果未提供)。
>>> def f( i, d={}, x=3 ) :
... d[i] = i*i
... x += i
... return x, d
...
>>> f( 2 )
(5, {2: 4})
但是当我下次调用 f 时,我得到:
>>> f(3)
(6, {2: 4, 3: 9})
看起来第二次调用时的关键字参数 d 并不指向空字典,而是指向前一个调用末尾留下的字典。每次调用时,数字 x 都会重置为 3。
现在我可以解决这个问题,但我希望您帮助理解这一点。我相信关键字参数位于函数的本地范围内,并且一旦函数返回就会被删除。 (如果我不精确,请原谅并纠正我的术语。)
因此,名称 d 指向的本地值应该被删除,并且在下一次调用时,如果我不提供关键字参数 d,那么 d 应该设置为default {}
。但正如您所看到的,d 被设置为 d 在前面的调用中指向的字典。
到底是怎么回事?
Is the literal {}
在封闭范围的 def 行中?
此行为在 2.5、2.6 和 3.1 中可见。
>>> def f(i, d=None, x=3):
... if not d:
... d={}
... d[i] = i*i
... x += i
... return x,d
...
>>> f(2)
(5, {2: 4})
>>> f(3)
(6, {3: 9})
>>>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)