python函数中关键字参数的默认值是空字典:字典在随后的调用中似乎没有初始化为{}?

2024-05-15 05:05:25 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个函数。我的目的是使用关键字参数默认值使字典成为空字典(如果未提供)。

>>> 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在前面的调用中指向的字典。

怎么回事?

定义行中的literal {}是否在封闭范围内?

这种行为见于2.5、2.6和3.1。


Tags: 函数目的名称default参数return字典定义

热门问题