簡體   English   中英

未在for循環中定義的python全局變量

[英]python global variable not defined in for loop

此代碼給出錯誤: UnboundLocalError: local variable 'LINES' referenced before assignment但是LINES明確初始化,因為如果我注釋掉print語句下面的行,它會拋出沒有錯誤並按預期打印len(lines) = 0 我不了解python嗎? 這里發生了什么?

LINES = []

def foo():
  for prob in range(1,3):
    print "len(lines) = %d" % len(LINES)
    LINES = []

if __name__ == "__main__":
  foo()

您可以從foo內部訪問全局變量,但是除非使用了global關鍵字,否則您無法重新綁定它們

因此,您可以使用LINES.append(...)LINES[:] = []因為它們只是修改LINES引用的列表。

當您嘗試使用LINES = []分配LINES ,Python知道它需要在函數局部變量中為LINES創建一個條目。 由於在向局部變量分配任何內容之前嘗試使用len(LINES) ,因此會導致錯誤

您可以像這樣檢查foo

>>> foo.func_code.co_nlocals
2
>>> foo.func_code.co_varnames
('prob', 'LINES')

如果在沒有LINES = []情況下再次定義foo ,您將看到Python不再將其標記為局部變量。

您需要使用global關鍵字:

def foo():
  global LINES
  for prob in range(1,3):
    print "len(lines) = %d" % len(LINES)
    LINES = []

否則,Python會認為LINES是本地的,因此在將其設置為[]之前打印出該值將是一個問題

您可以通過打印出來獲取全局變量LINES的值,但是當您有語句時

LINES = []

嘗試將LINES設置為新列表,Python將其解釋為局部變量

在查看全局(模塊級別)范圍之前,Python將首先查看變量的函數范圍。 由於您是在示例函數中分配給LINES ,因此python知道不使用全局變量,但是您會在定義它之前嘗試訪問此變量。 您應該在print語句之前初始化LINES ,或者省略LINES = []語句。

正如Desired Login所說,

由於您在示例函數中指定了LINES,因此python知道不使用全局變量,但在定義之前嘗試訪問此變量。

這還沒有結束,你可以通過使用全球關鍵字,告訴蟒蛇的解決這個問題LINES在功能上是一樣的LINES功能之外。

嘗試:

LINES = []

def foo():
  global lines
  for prob in range(1,3):
    print "len(lines) = %d" % len(LINES)
    LINES = []

if __name__ == "__main__":
  foo()

暫無
暫無

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

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