我在 Python 3 中創建了以下兩個函式。第一個函式test_list在串列中正常作業,a沒有錯誤。我可以修改該函式中的串列元素。
但是,第二個功能test_int會彈出一個錯誤local variable 'b' referenced before assignment。為什么我不能對變數執行此操作b?
a=[1,2,3]
def test_list():
a[0]=2
return a
b = 2
def test_int():
b = 1
return b
uj5u.com熱心網友回復:
b = 1相當于b = b.__iadd__(1); 由于名稱b被該陳述句(lhs)系結,編譯器推斷這b是一個區域變數;但是,rhs 運算式也包含名稱b,因此您會收到錯誤“賦值前參考的區域變數'b'” (區域名稱b在計算運算式時不參考任何內容)。
a[0] = 2另一方面,等效于a.__setitem__(0, 2),因此不涉及名稱系結。
如果您希望修改函式內的全域名稱系結,可以使用關鍵字global; nonlocal包含在外部但不是全域范圍中的名稱也有等價物。
uj5u.com熱心網友回復:
b是全域范圍的。您正在嘗試在本地背景關系中修改它,即在test_int. global如果您希望在本地背景關系中修改全域范圍的變數,則需要該關鍵字。在此處閱讀有關 python 中的變數作用域的資訊。
第一個函式test_list起作用的原因是因為您沒有修改全域變數本身,而只是修改了內容。這是修改全域變數時發生的情況的一個很好的解釋:https ://stackoverflow.com/a/31437415/14715054
這將解決您的問題:
a=[1,2,3]
def test_list():
a[0]=2
return a
b = 2
def test_int():
global b
b = 1
return b
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/492214.html
標籤:Python python-3.x
