将python中的全局变量分配给单个变量或函数?

时间:2015-12-06 13:00:19

标签: python global-variables global variable-assignment

我认为我掌握了为什么必须使用全局变量来将变量绑定到函数内外。所以,如果我打电话:

    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变量并抛出一个赋值错误。

2 个答案:

答案 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