python-3.x 为什么可以在函数中修改全局列表而不使用关键字global?

qvk1mo1f  于 2023-05-30  发布在  Python
关注(0)|答案(1)|浏览(130)

上面的代码对我来说是合理的,因为我知道有必要使用关键字global来分配或修改全局变量。

但是,当我使用列表时,我可以访问全局变量而不使用关键字global。这是否意味着是否使用全局变量取决于变量的类型?在赋值或修改其他类型的变量(tuple,dic,...)时,我是否需要使用global?

g2ieeal7

g2ieeal71#

当我们在函数内部分配一个变量时,该变量默认是局部的。现在,如果我们看到pr()中发生的事情,函数a被赋值为:a += 1,即a = a + 1.
当python到达/扫描这行代码时,它首先看到左侧a,然后放入它的本地作用域。当它看到右侧a时,然后发现没有值分配给a(成为局部变量)。这就是为什么它抛出错误。
另一方面,list是可变的(原地可变)对象。这就是为什么赋值在可变对象(列表或字典)的情况下无关紧要。
另外,字符串是不可变的,因此在赋值过程中会有不同的处理方式

相关问题