SOME_VARIABLE = []
def some_fun:
append in SOME_VARIABLE
s = []
s = SOME_VARIABLE
SOME_VARIABLE = [] // Not setting to empty list.
return s
如何將SOME_VARIABLE
重置爲空。如何重置python中的全局變量?
SOME_VARIABLE = []
def some_fun:
append in SOME_VARIABLE
s = []
s = SOME_VARIABLE
SOME_VARIABLE = [] // Not setting to empty list.
return s
如何將SOME_VARIABLE
重置爲空。如何重置python中的全局變量?
如果您讀取了一個變量,Python會在整個範圍鏈中查找它。這意味着:
GLOB_VAR = "Some string"
def some_fun():
print GLOB_VAR
將打印Some string
現在,如果你寫一個變量,Python將它在局部範圍內,如果不能找到你給的名稱的變量地方一級,然後創建一個。
這意味着,在你的榜樣,你已經創建了一個名爲SOME_VARIABLE
您的本地some_fun
函數的變量,而不是更新的全球SOME_VARIABLE
。這是一個經典的python陷阱。
如果你想寫入你的全局,你必須明確地告訴Python你正在談論一個已經存在的全局變量。爲此,您需要使用global
關鍵字。因此,以下內容:
GLOB_VAR = "Some string"
def some_fun():
global GLOB_VAR
GLOB_VAR = "Some other string"
some_fun()
print GLOB_VAR
將打印Some other string
。
注:我認爲這是一種鼓勵人們保持全局變量爲只讀的方式,或者至少考慮他們在做什麼。
當您嘗試先讀取然後寫入全局行爲時,行爲是相同的(只是更令人驚訝)。以下:
GLOB_VAR = False
def some_fun():
if GLOB_VAR:
GLOB_VAR = False
some_fun()
將提高:
Traceback (most recent call last):
File "t.py", line 7, in <module>
some_fun()
File "t.py", line 4, in some_fun
if GLOB_VAR:
UnboundLocalError: local variable 'GLOB_VAR' referenced before assignment
因爲自從我們將修改GLOB_VAR
,它被認爲是一個局部變量。
更新:Ely Bendersky有一個相關的in-depth post關於這是值得閱讀更正式的細節。
SOME_VARIABLE
是全球性的,重新綁定它不會生效,除非您使用global
。但是因爲它是一個可變對象,所以應該適當地進行變異。
del SOME_VARIABLE[:]
你需要告訴你是在談論一個全局變量的解釋:
def some_fun:
global SOME_VARIABLE
...
SOME_VARIABLE = []
,如果你不需要SOME_VARIABLE了,那麼你可以使用:
del SOME_VARIABLE
如果你想要一個空的清單:
del SOME_VARIABLE[:]