2009-10-19 229 views

回答

17

当你说

global var 

你告诉Python的是变种是在全球背景下的定义是相同的变种。 你会在下面的方式来使用它:

var=0 
def f(): 
    global var 
    var=1 
f() 
print(var) 
# 1 <---- the var outside the "def f" block is affected by calling f() 

如果没有全球性的说法,“DEF F”块内的VAR将是一个局部变量, 并设置其价值将有外面的无功无影响“def f”块。当你说globals.update(var)我猜你实际上意味着globals()。update(var)。当你说globals.update(var)时, 让我们分开。

globals()返回一个dict对象。字典的键是对象的名称,并且字典的值是关联的对象的值。

每个字典都有一个叫做“update”的方法。所以globals()。update()是对这个方法的调用。 更新方法需要至少一个参数,并且该参数预计是一个字典。如果你告诉Python的

globals().update(var) 

然后VAR最好是一个字典,你告诉Python来使用var字典的内容更新全局()字典。

例如:

#!/usr/bin/env python 

# Here is the original globals() dict 
print(globals()) 
# {'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__file__': '/home/unutbu/pybin/test.py', '__doc__': None} 

var={'x':'Howdy'} 
globals().update(var) 

# Now the globals() dict contains both var and 'x' 
print(globals()) 
# {'var': {'x': 'Howdy'}, 'x': 'Howdy', '__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__file__': '/home/unutbu/pybin/test.py', '__doc__': None} 

# Lo and behold, you've defined x without saying x='Howdy' ! 
print(x) 
Howdy 
+0

确定,所以,如果我在方法的变量声明,并且在该方法称为全局()更新(“变种”:“0”)。仅在第一次运行的脚本中,我将无法像第二次执行脚本时其余代码一样声明为“全局变量”的变量使用'var'? – frank 2009-10-19 18:11:24

+0

globals()。update('var':'0')应该是globals()。update({'var':'0'})。这会影响全局变量'var',即使这个命令放在方法中。这些命令的行为在脚本的每次运行中都是相同的。如果这不能解决您的问题,请发布您的代码,以便我们可以更好地理解。 – unutbu 2009-10-19 18:19:34

+0

好的,因为它很短,但格式会奇怪: 尝试: \t我+ = 1 除了NameError: \t I = 0 。该代码将在主要方法中,并且我不能更改它,或者在方法之外的代码之前添加任何方法声明。我能做的是在这个小小的代码片段之后,在主要方法中添加代码。我需要让'i'充当全局变量,以便在每个后续脚本执行时以'1'递增。 – frank 2009-10-19 18:35:43