函数内外的Python全局列表修改

标签 python

2我是 Python 的新手(使用 3.3.3)并且有一个列表相关的问题。在函数内修改全局列表变量时(请不要讲授全局变量的弊端),通常不需要在函数内使用 global 关键字声明列表 - 只要您坚持使用列表方法。特别是,您不得在未先使用 global 关键字的情况下使用增广加法。令我惊讶的是,在函数外部使用增广加法显然不会修改列表变量(仅修改列表内容),因此我希望能够在不使用 global 关键字的情况下在函数内部使用它。这里有两个我无法调和的例子:

list_1 = []

def my_func():
    list_1.append(0)
    #list_1 += [0]

my_func()
print('list_1 =', list_1)

这会按预期打印 list_1 = [0],而注释掉的增广加法运算会生成关于在赋值前使用局部变量的投诉。

这是一个我无法与前一个相协调的例子:

list_1 = [0]
list_2 = list_1
list_1 += [1]
print('list_2 =', list_2)

这会打印出 list_2 = [0, 1],这表明 list_1 += [1] 没有修改 list_1 变量。我知道 list_1 = list[1] + [1] 符合修改 list_1 的条件,但扩充加法似乎没有。为什么在函数内部进行增广加法需要使用 global 关键字?感谢您帮助理解这一点。

最佳答案

问题是当一个函数体被解析时,在正常赋值或扩充赋值中使用的所有变量都被认为是局部变量,所以当函数被调用时,Python 不会在全局范围内寻找这些变量,因此它会引发一个错误。因此,您需要将这些变量指定为 global 以告诉 Python 在全局范围内查找它们。

另一种选择是使用 list.extend() 而不是 +=

相关:

关于函数内外的Python全局列表修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23436385/

相关文章:

python - Jinja2 for Flask 未拾取子模板

python - 如何在所有数据框行中搜索超出定义数字范围的值?

python - 用于沿 (x,y) 网格移动相机的 Mel/Python 脚本

python - 在 Python pandas 中将数据映射到另一年的同一工作日

python - 从键改变的列表中获取索引,groupby

python - 在 virtualenv 中运行 pip 时出现 AttributeError

python - 如何使用 genfromtxt() 从 NumPy 中的文本文件中读取不同长度的列?

python - 一次用一个键在两个命令之间切换

python - SCAPY发送数据包错误OSError : [Errno 97] Address family not supported by protocol

python - Google App Engine - 应用程序无法发送日志