gpt4 book ai didi

python - 引用全局基元与对象

转载 作者:太空宇宙 更新时间:2023-11-03 11:02:56 25 4
gpt4 key购买 nike

有人可以用 Python 解释以下结果吗?

当运行下面的代码片段时,Python 抛出一个错误,指出变量 x 在赋值之前被引用:

x = 1

def increase_x():
x += 1

increase_x()

当然,解决方案是在 increase_x 的函数声明之后包含 global x 行。

但是,当运行下一段代码时,没有错误,结果如您所愿:

x = [2, -1, 4]

def increase_x_elements():
for k in range(len(x)):
x[k] += 1

increase_x_elements()

这是因为整数在 Python 中是原语(而不是对象)所以第一个片段中的 x 是存储在内存中的原语,而第二个片段中的 x 引用指向列表对象的指针?

最佳答案

正如 Ffisegydd 指出的那样,Python 中没有原始类型这样的东西:一切都是对象。

不过,您应该注意,您在这两个片段中做了两件完全不同的事情。首先,您将 x 重新绑定(bind)到 x+1 的值。通过尝试分配给 x,您已将其设为本地范围,因此您对 x+1 的引用失败。

在第二个片段中,您正在修改 x 的内容,而不是重新绑定(bind)它。这是可行的,因为列表是可变的,但区别不在于可变与不可变,而是可变与重新绑定(bind):重新绑定(bind)可变对象会失败,就像对整数这样做一样。

关于python - 引用全局基元与对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27795943/

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