[英]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不再將其標記為局部變量。
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.