分配变量(
x = ...)时,将在当前作用域(例如,当前函数的本地范围)中创建一个变量。如果它恰好在外部(例如全局)范围内隐藏了变量,那就太糟糕了-
Python不在乎(这是一件好事)。所以你不能这样做:
x = 0def f(): x = 1f()print x #=>0
并期待
1。相反,您需要声明您打算使用
global x:
x = 0def f(): global x x = 1f()print x #=>1
但是请注意,变量的分配与方法调用有很大不同。您始终可以在范围内的任何对象上调用方法,例如,对来自外部(例如,全局)范围的变量进行调用,因为没有局部阴影可以覆盖它们。
同样 非常 重要:成员分配(
x.name = ...),项目分配(
collection[key] =...),切片分配(
sliceable[start:end] =...)以及更多的方法调用同样都是方法!因此,您无需
global更改全局成员或调用它的方法(即使当它们使对象发生突变时)。



