繁体   English   中英

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

[英]Assigning global variables in python to a single variable or function?

我想我理解为什么必须使用全局变量将变量绑定到函数中以及函数外。 因此,如果我致电:

    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变量并抛出前分配错误。

关键字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是可变值。

您可以创建修改全局变量的函数:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM