1、函數內部的變數名如果第一次出現,且出現在=前面,即被視為定義一個局部變數,不管全域域中有沒有用到該變數名,函數中使用的將是局部變數,例如:
num = 100def func(): num = 123 print(num)func()
輸出:
123
說明函數中定義的num是一個局部變數,會將全域變數覆蓋。再例如:
num = 100def func(): num += 100 print(num)func()
輸出:
UnboundLocalError: local variable 'num' referenced before assignment
錯誤提示局部變數num在賦值前被應用,也就是該變數沒有定義就使用它,由此再次證明了這裡定義了一個局部變數,而不是使用的全域的num。
總結:函數內部的變數名如果第一次出現,且出現在=前面,即被視為定義一個局部變數。
Python makes educated guesses on whether variables are local or global. It assumes that any variable assigned a value in a function is local.
From: http://www.tutorialspoint.com/python/python_modules.htm
2、函數內部的變數名如果第一次出現,且出現在=後面,且該變數在全域域中已定義,則這裡將引用全域變數,如果該變數在全域域中沒有定義,當然會出現“變數未定義”的錯誤。例如:
num = 100def func(): x = num + 100 print(x)func()
輸出:
200
表示這裡使用的num是全域變數num。
或者其他使用該變數(例如調用成員函數)的情況,也將引用全域變數,例如:
a = [1, 2]def func(): a.append(3) print(a) func()
輸出:
[1, 2, 3]
總結:只要是*使用*變數,而該變數在全域域中有定義,而在局部沒有定義,則會使用全域變數。
3、函數中使用某個變數時,該變數名既有全域變數也有同名的局部變數,則會使用局部變數,例如:
num = 100def func(): num = 200 x = num + 100 print(x)func()
結果:
300
總結:如果使用的變數在全域域中有定義,在局部域中也有定義,則預設會使用局部變數。
4、在函數中,如果想給全域變數賦值,則需要用關鍵字global生命,例如:
num = 100def func(): global num num = 200 print(num)func()print(num)
輸出:
200
200
說明函數中給num賦值為200是修改的全域變數,而且這裡沒有定義新的局部變數,所以後續如果再操作num也是操作的全域變數,例如:
num = 100def func(): global num num = 200 num += 100 print(num)func()print(num)
輸出:
300
300
總結:如果要在函數中給全域變數賦值,需要用global關鍵字聲明。
By: