簡體   English   中英

如何在python中重置全局變量?

[英]How to reset global variable in 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會在整個范圍鏈中查找它。 這意味着:

GLOB_VAR = "Some string"

def some_fun():
    print GLOB_VAR

將打印Some string

現在,如果你寫一個變量,Python在本地范圍內查找它,如果它找不到你在本地級別給出的名字的變量,那么它會創建一個。

這意味着在您的示例中,您已經為some_fun函數創建了一個名為SOME_VARIABLE local的變量,而不是更新全局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有一篇相關的深入帖子 ,對於更正式的細節值得閱讀。

您需要告訴解釋器您正在談論全局變量:

def some_fun:
    global SOME_VARIABLE
    ...
    SOME_VARIABLE = []

如果您不再需要SOME_VARIABLE,可以使用:

del SOME_VARIABLE

如果你想要一個空列表:

del SOME_VARIABLE[:]

SOME_VARIABLE是全局的,因此除非使用global否則重新綁定它不會生效。 但由於它是一個可變對象,只需適當地改變它。

del SOME_VARIABLE[:]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM