def closure_conf(prefix):
def innerfunc(name):
print prefix, name
return innerfunc
holiday = closure_conf("10月1日是:")
# holiday("國慶節")
print "function name is:", holiday.__name__
執行以後輸出為:
function name is: innerfunc
**分析:
我們先定義了乙個函式closure_conf(prefix);在該函式內部我們巢狀了另乙個函式innerfunc(name);在innerfunc函式中,我們呼叫了closure_conf的引數prefix(列印出來了);注意,closure_conf函式的返回是innerfunc,是乙個函式名,僅僅是函式名,而不是呼叫(如果你這麼寫:innerfunc(),就是呼叫了)。簡單來說,就是乙個函式內嵌另乙個函式,並且返回內嵌函式的函式名。
接下來是我們呼叫closure_conf並且傳了乙個引數,列印這個執行後的名字__name__。
一般來說執行什麼函式,就應該列印出的名字就是這個函式名,但是這裡我們發現列印的竟然是內嵌函式的名字,也就是說你給closure_conf傳遞了引數並執行時,函式變成了innerfunc,但是innerfunc並沒有執行,因為沒有列印innerfunc裡面的語句。如果放開注釋的語句,就發現可以執行innerfunc函式了。
在python中建立乙個閉包需要滿足以下三點:
- 閉包函式必須有內嵌函式
- 內嵌函式需要引用該巢狀函式上一級中的變數
- 閉包函式必須返回內嵌函式
python之函式,閉包
引數 收集引數 引數名 def stu info print info 0 print info 1 print len info print type info stu shanxi 200008966 19 列印結果 shanxi 200008966 3 class tuple 返回值 def ...
python函式閉包和遞迴 函式和閉包之尾遞迴
前面提到過,如果想把更新var的while迴圈轉換成僅使用val這種更函式式的風格的話,有時候你可以使用遞迴。下面的例子是通過不斷改善猜測數字來逼近乙個值的遞迴函式 var guess initialguess while isgoodenough guess guess improve guess...
python閉包函式
python函式閉包 closure 比較抽象,在函式式程式設計中運用地比較多,通俗點就是子函式 內嵌函式 呼叫上層函式 閉包函式 的變數,且上層函式 閉包函式 接收的變數會儲存在子函式 內嵌函式 的變數中可以供子函式 內嵌函式 呼叫 概念很抽象,但是實現的例子還是比較容易理解的,這裡記住實現函式閉...