天天看點

python閉合函數_python之閉包函數

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中建立一個閉包需要滿足以下三點:

- 閉包函數必須有内嵌函數

- 内嵌函數需要引用該嵌套函數上一級中的變量

- 閉包函數必須傳回内嵌函數