gpt4 book ai didi

具有列表本地和全局范围的 Python 奇怪的东西

转载 作者:行者123 更新时间:2023-12-05 05:37:07 26 4
gpt4 key购买 nike

为什么我们可以用附加方法修改列表,但不能用列表连接做同样的事情?我知道本地和全局范围,我很困惑为什么我们可以用 append 方法做到这一点,提前致谢

some_list=[]

def foo():
some_list.append('apple')


foo()
print(some_list)
#it works

使用列表连接

some_list=[]

def foo():
some_list+=['apple']


foo()
print(some_list)
#UnboundLocalError: local variable 'some_list' referenced before assignment

最佳答案

+= 等增强操作会重新分配原始变量,即使这并非绝对必要。

Python 的运算符转换为对对象的魔法方法的调用:__iadd__ for +=。像 int 这样的不可变对象(immutable对象)不能改变自己,所以你不能像在 C 中那样做就地 += 。相反,python 的增强方法返回一个对象到被重新分配给被操纵的变量。像列表这样的可变对象只会返回它们自身,而不可变对象(immutable对象)会返回一个不同的对象。

由于正在重新分配变量,因此它必须遵循与任何其他变量相同的范围规则。重新分配会导致 python 假定该变量位于本地命名空间中,您需要 global 关键字来覆盖该假设。

关于具有列表本地和全局范围的 Python 奇怪的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73185954/

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