回覆列表
-
1 # 使用者2388582881469
-
2 # a不會愛的小笨蛋
global語句聲明後,指定的變數被認為是函式外的。後面的所有操作都是在操作函式外的那個變數,雖然你是在函式內操作的。雖然Python提供了這個功能,但是應該儘量避免這樣做,因為這使得程式的讀者會不清楚這個變數是在哪裡定義的。
def func(): global x print "x is", x x = 2 print "Changed local x to", xx = 50func()print "Value of x is", x
執行結果是這樣的x is 50Changed global x to 2Value of x is 2
LEGB規則
名稱空間:一個容器,其中包含的是對映到不同物件的名稱。
作用域:定義了一個“層次”,我們從其中的名稱空間中查詢特定的“名稱-物件”對映對。
全域性變數與區域性變數的字典對映,可使用函式和LEGB規則,表示的是Local -> Enclosed -> Global -> Built-in
問題的關鍵就是:
如果我們沒有明確地告訴Python我們要使用的是全域性作用域,而是直接嘗試修改變數值的話,就很容易產生UnboundLocalError。(記住,賦值操作的右半部分是先執行的)eg:
修改版:加上變數的作用域。
LEGB - 區域性,外圍,全域性,內建