python之閉包函式

2022-08-28 11:27:07 字數 874 閱讀 2584

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 比較抽象,在函式式程式設計中運用地比較多,通俗點就是子函式 內嵌函式 呼叫上層函式 閉包函式 的變數,且上層函式 閉包函式 接收的變數會儲存在子函式 內嵌函式 的變數中可以供子函式 內嵌函式 呼叫 概念很抽象,但是實現的例子還是比較容易理解的,這裡記住實現函式閉...