2009-10-19 287 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