And*_*kov 26 python dictionary scope keyword-argument
这是一个功能.我的意图是使用关键字参数默认值使字典成为空字典(如果未提供).
>>> def f( i, d={}, x=3 ) :
... d[i] = i*i
... x += i
... return x, d
...
>>> f( 2 )
(5, {2: 4})
Run Code Online (Sandbox Code Playgroud)
但是当我接下来打电话给f时,我得到:
>>> f(3)
(6, {2: 4, 3: 9})
Run Code Online (Sandbox Code Playgroud)
看起来第二次调用时的关键字参数d不指向空字典,而是指向前一次调用结束时留下的字典.每次通话时,号码x重置为3.
现在我可以解决这个问题,但我希望你的帮助能够理解这一点.我相信关键字参数在函数的本地范围内,并且一旦函数返回就会被删除.(如果我不精确,请原谅并纠正我的术语.)
因此,应删除名称d指向的本地值,并在下一次调用时,如果我不提供关键字参数d,则应将d设置为default {}
.但正如您所看到的,d被设置为前一个调用中指向的字典.
到底是怎么回事?
是literal {}
在封闭范围的防线?
在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})
>>>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17184 次 |
最近记录: |