Python 基礎 7 函式 作用域 全域性變數 區域性變數
阿新 • • 發佈:2019-01-06
作用域
作用域指的是變數在程式中的可應用範圍。
作用域按照變數的定義位置可以劃分為4類即LEGB:
Local(函式內部)區域性作用域。
Enclosing(巢狀函式的外層函式內部)巢狀作用域(閉包)。
Global(模組全域性)全域性作用域。
Built-in(內建)內建作用域。
Python搜尋4個作用域[本地作用域(L)之後是上一層結構中def或者lambda的本地作用域(E),之後是全域性作用域(G)最後是內建作用域(B)(即python的內建類和函式等)]
並且在第一處能夠找到這個變數名的地方停下來。如果變數名在整個的搜尋過程中都沒有找到,Python就會報錯。
注意:
在python中,模組(module),類(class)、函式(def、lambda)會產生新的作用域,其他程式碼塊是不會產生作用域的,也就是說,類似條件判斷(if……else)、迴圈語句(for x in data)、異常捕捉(try…catch)等的變數是可以全域性使用的。
b = 20 #b變數聲明瞭全域性的的作用域,因此可以再全域性使用
def func():
a =10 # a變數在區域性作用域中,a變數的作用域範圍就是整個函式體
print(a)
print(b)
print(a) #報錯 因為a變數已經出了自己作用域的範圍
func()
print(b) #能正常執行
c = 30 def outter(): a = 10 def inner(): b = 20 print(b) print(a) #訪問巢狀作用域中的內容 print(c) #訪問全域性作用域中的內容 inner #print(b) #出了自己的範圍 print(a) print(c) #print(a) #報錯 outter()
3,變數的搜尋範圍
a = 1
def outter():
a = 10
def inner():
a = 20
#print(a) #20-->10-->1
inner()
#print(a) # 10 -->1
outter
print(a) #1
全域性變數和區域性變數
在函式中定義的變數稱為區域性變數,只在函式內部生效
在程式一開始定義的變數稱為全域性變數,全域性變數的作用域是整個程式
name = 'zs' # 全域性變數 def func(): name = 'ls' # 區域性變數 print(name) func()
全域性變數是不可變資料型別,函式無法修改全域性變數的值
全域性變數是可變資料型別,函式可以修改全域性變數的值
a = 10
lst =[12,3]
def func(c,lst):
c = 20
lst1.append(4)
print(c,lst1)
func(a,lst)
print(a,lst)
結果:
20 [12, 3, 4]
10 [12, 3, 4]
a = 10
lst = [1, 2, 3]
def func():
a = 30
print(a)
lst.append(4)
func()
print(a)
print(lst)
結果:
30
10
[1, 2, 3, 4]