在Python中将列表定义为全局变量
我正在使用列表,其中列出了我的程序中的某些功能。这实际上是一个共享列表,我的所有功能都可以对其进行编辑。在所有功能中是否真的有必要将其定义为“全局”?
我的意思是在使用它的每个函数中放置global关键字,还是在所有函数之外定义它就足够了,而无需在其定义后面使用global字?
-
分配变量(
x = ...
)时,将在当前作用域(例如,当前函数的本地范围)中创建一个变量。如果它恰好在外部(例如全局)范围内隐藏了变量,那就太糟糕了-
Python不在乎(这是一件好事)。所以你不能这样做:x = 0 def f(): x = 1 f() print x #=>0
并期待
1
。相反,您需要声明您打算使用global x
:x = 0 def f(): global x x = 1 f() print x #=>1
但是请注意,变量的分配与方法调用有很大不同。您始终可以在范围内的任何对象上调用方法,例如,对来自外部(例如,全局)范围的变量进行调用,因为没有局部阴影可以覆盖它们。
同样 非常 重要:成员分配(
x.name = ...
),项目分配(collection[key] = ...
),切片分配(sliceable[start:end] = ...
)以及更多的方法调用同样都是方法!因此,您无需global
更改全局成员或调用它的方法(即使当它们使对象发生突变时)。