gpt4 book ai didi

python - 空字典作为python函数: dictionary seems to not be initialised to {} on subsequent calls?中关键字参数的默认值

转载 作者:IT老高 更新时间:2023-10-28 22:19:28 26 4
gpt4 key购买 nike

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

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

发生了什么事?

def 行中的 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})
>>>

关于python - 空字典作为python函数: dictionary seems to not be initialised to {} on subsequent calls?中关键字参数的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5712904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com