Hos*_*ein 11 python list global-variables
我正在使用一个列表,其中一些函数在我的程序中工作.这实际上是一个共享列表,我的所有功能都可以编辑它.是否真的有必要在所有功能中将其定义为"全局"?
我的意思是将global关键字放在每个使用它的函数中,或者在不使用其定义背后的全局字的情况下在所有函数之外定义它是否足够?
小智 25
分配变量(x = ...)时,您将在当前范围中创建变量(例如,当前函数的本地变量).如果它碰巧在外部(例如全局)范围内影响变量,那么太糟糕了 - Python并不关心(这是一件好事).所以你不能这样做:
x = 0
def f():
x = 1
f()
print x #=>0
Run Code Online (Sandbox Code Playgroud)
期待1.相反,你需要声明你打算使用global x:
x = 0
def f():
global x
x = 1
f()
print x #=>1
Run Code Online (Sandbox Code Playgroud)
但请注意,变量的赋值与方法调用非常不同.您总是可以在范围内调用任何方法 - 例如,来自外部(例如全局)范围的变量,因为没有任何局部阴影它们.
同样非常重要的是:成员赋值(x.name = ...),项目赋值(collection[key] = ...),切片赋值(sliceable[start:end] = ...)以及更多的方法调用也是如此!因此,您不需要global更改全局成员或调用它的方法(即使它们改变了对象).
是的,global foo如果要写入,则需要使用。
foo = []
def bar():
global foo
...
foo = [1]
Run Code Online (Sandbox Code Playgroud)