這個問題在這里已經有了答案: 不明白為什么會發生 UnboundLocalError(關閉)[重復] 8 個答案 15 小時前關閉。
我寫了一個類似于下面的代碼,它給了我local variable 'a' referenced before assignment錯誤。當我將其更改a = [2]為a.append(2)時,它起作用了。
def f():
a = [1]
def f1():
a = [2] # => no error with a.append(2)
f1()
print(a)
為什么?為什么決議器無法識別外部awith =?
uj5u.com熱心網友回復:
這是一個任務a。它基本上是語法糖
a = a.__iadd__([2])
生成代碼時,賦值會a生成一個區域變數,但隨后賦值的 RHS 會嘗試在運行時定義該變數之前訪問該變數。
a.append(2),另一方面,不是一個任務。a是一個自由變數,其值取自最近的封閉范圍。
如果要分配給非區域變數,則需要先將名稱宣告為非區域。
def f():
a = [1]
def f1():
nonlocal a
a = [2]
f1()
print(a)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/410688.html
標籤:
下一篇:決議json并獲取相同型別的值
