我认为我掌握了为什么必须使用全局变量来将变量绑定到函数内外。所以,如果我打电话:
x = 0
y = 0
z = 0
def example():
global x
global y
global z
我将能够改变函数之外的x,y,z。
但是,有没有办法将我需要的所有全局变量分配给其他东西,然后在一行中调用它们。
我试过了:
def global_var():
global x
global y
global z
然后致电:
def example():
global_var()
x += 1
etc
但这似乎不起作用。或者至少代码似乎首先遇到x变量并抛出一个赋值错误。
答案 0 :(得分:1)
关键字global具有方法范围,因此当您在global_var()中调用它时,它们可以在其中进行修改。但是当你从它返回到example()时。您的全局不再有效,因此x是只读的,您无法修改其值。你必须摆脱gloval_var()
def example():
global x
global y
global z
x += 1
但是如果我可以推荐你的话。不要使用这种方法。如果这些变量以某种方式相关,请使用字典,以便您可以做到。
my_vars = {'x':0, 'y':0, 'z':0}
def example():
my_vars['x'] += 1
在这种情况下,字典不需要关键字global才能进行修改。这背后的原因是您没有分配新值,只修改现有对象。如果您写x += 2
,则表示x = x + 2
将导致新的分配,这会导致x
指向另一个值,如果没有global
,这是不可能的。但是,如果修改my_vars,它的内存地址保持不变,但只有其数据发生变化,因为dict
是一个可变值。
答案 1 :(得分:0)
您可以创建修改全局变量的函数:
x = 0
y = 0
z = 0
def setGlobals(**vals):
for key, value in vals.iteritems():
globals()[key] = value
print x, z
setGlobals(x=5, z=3)
print x, z
输出:
0 0
5 3