gpt4 book ai didi

python - 仍然对 Python 中的可变默认参数值 "gotcha"感到困惑

转载 作者:太空狗 更新时间:2023-10-30 00:49:39 27 4
gpt4 key购买 nike

<分区>

我知道不应该使用 mutable default parameter value在 Python 中(有一些异常(exception))因为这个值只在定义函数时计算和存储一次,而不是每次调用函数时。

我的理解是这样的(使用下面的例子;请原谅我的语言不精确,因为我只是 Python 编程的初学者,因此卡在了我教科书的函数章节):

def f(x = [1, 2, 3]):
x.append(4)
print(x)

f()
f()

1)定义了函数f,x(f中的局部变量)默认为[1, 2, 3]变量(甚至在调用函数之前)

2) 当 f() 被调用时,x 仍然是 [1, 2, 3] 因为没有参数传递给它,x 继续保持它的默认值

3) x 被 append 修改,变成 [1, 2, 3, 4],并被打印出来

然而,这就是我的困惑出现的地方。我假设:

4) 当 f 结束时,x 被销毁(在堆栈中或任何你称之为的东西中)并且不再与列表对象 [1, 2, 3, 4] 相关联**

5) 列表对象 [1, 2, 3, 4] 被回收,因为不再有引用它的变量

因此,

6) 当第二次调用 f() 时,我预计 Python 会输出错误,因为 x 现在不再具有与之关联的值。换句话说,当上一次评估的默认值被回收/销毁时,Python 如何重用它?

感谢您的帮助和解释!

** 这个理解是我从Ned Batchelder's page on variable name assignment得到的(见下文) Net Batchelder's variable assignment function

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