python 函式巢狀及作用域

2022-03-10 11:35:16 字數 1106 閱讀 6600

函式可以巢狀嗎?當然可以

我們可以看到,外部函式outer_func()的函式體中巢狀了乙個函式inner_func(),並且outer_func()體中

還呼叫了內部函式inner_func(),所以每當呼叫outer_func()的時候,都會呼叫一次inner_func(),我

們來看一下列印結果:

我們可以看到,內部函式inner_func()被呼叫了。

其實,我們可能更加的關心作用域

我們看如下**:

首先,變數a是乙個全域性變數,變數b是乙個區域性變數,但需要注意的是該變數位於內部函式inner_func()的外面,

相當於是乙個enclosed的作用範圍。所以,當函式內部要引用全域性變數並修改全域性變數時,需要用到關鍵字global,

內部函式需要用到外部函式的變數並修改時,需要用到關鍵字nonlocal.

關於變數作用域,可以參照legb原則

l:local

e:enclosed

g:global

b:build-in

那麼當訪問變數時,會先從local(區域性)尋找,若沒有則去下一層enclosed(閉包域,即外部函式的作用域)中尋找,

若仍然沒有找到則去global(全域性)中尋找,最後去到build-in(內建關鍵字)中尋找。

tips:小範圍內可以訪問大範圍中的變數,注意是訪問。如內部函式可以訪問外部函式變數和全域性變數,當反過來卻

不行,如外部函式訪問內部函式的變數。若要修改全域性變數或者外部函式的變數,則需要對變數進行關鍵字修飾,如

對全域性變數進行global 修飾,對外部函式的變數進行nonlocal修飾,這樣就能明確應用的是變數是全域性的還是外部函

數的。注意,對應可變變數(如列表,字典)來說,不需要進行global或nonlocal修飾,直接可以訪問並修改

1 5 2 Python函式巢狀及作用域

if條件成立的結果 if 條件 else 條件不成立的結果 例如 a 20 b 10 c a if a b else b print c 複製 全域性命名空間 建立的儲存 變數名與值的關係 的空間叫做全域性命名空間 區域性命名空間 在函式的執行中開闢的臨時的空間叫做區域性命名空間 內建命名空間 內建...

函式的物件 巢狀及作用域

1 函式的物件 函式的第一類物件的含義是函式可以被當做資料處理 def func func print from func print func 列印函式名的位址 加括號即呼叫函式內容 1 引用 def func func print from func f func print f f 2 把自己...

巢狀函式和作用域

看上面的標題的意思是,函式還能套函式?name alex def change name name alex2 def change name2 name alex3 print 第3層列印 name change name2 呼叫內層函式 print 第2層列印 name change name ...