Python 返回函式+匿名函式

dicksonjyl560101發表於2018-07-28

返回函式

粗粗看了一遍學習資料,感覺返回函式的意思好理解,但是實際應用起來就有點麻煩了。

先捋一捋思路叭。

首先,高階函式除了能接收函式作為引數外,也能將函式作為結果值返回。

 

函式作為返回值

求和 做個簡單的例子:

一般的求和函式我們會這樣寫:

>>> def calc_sum(*args):

a = 0

for n in args:

        a = a + n

return a

>>> calc_sum(1,2,3,4)

10

直接求解,返回結果。

但是有時候我們不需要立刻求和,可能後面還需要計算,這個時候就要用到返回函式了。

(當我看到這裡的時候,腦子裡想的一直都是:為什麼不要它立刻求和??)

返回函式到底又什麼作用呢?

就好比做一件事,在做的過程中,返回函式的作用就是告訴你,我做到哪裡/如何了,你能幹嘛幹嘛了。

暫時沒有更具體的例子,希望以後能遇到,加深一下理解!(太抽象了!!)

好,回過頭再來看看 求和用返回函式怎麼寫。

(不返回求和結果,而是返回一個求和的函式)

>>> def lazy_sum(*args):

def sum():

a = 0

for n in args:

        a = a + n

        return a

return sum

>>> f = lazy_sum(1,3,5,7,9)

>>> f

<function lazy_sum..sum at 0x11104f620>

可以看到,當我們呼叫 lazy_sum() 時,返回的不是求和結果,而是求和函式。

如果要計算真正的求和結果,就要再呼叫f.【 f() 相當於sum() 】

>>> f()

25

內部函式 sum 可以引用外部函式 lazy_sum 的引數和區域性變數。

lazy_sum 返回函式 sum 時,相關引數和變數都儲存在返回的函式中。(雖然這是一句很好理解的話,但是我莫名感覺它不簡單!

這種程式結構,叫做“閉包”(Closure)。(吼!

這裡需要注意的是,每次呼叫lazy_sum,返回的都是一個新的函式!

就算傳入引數相同,返回的函式也不同!

>>> f1 = lazy_sum(1, 3, 5, 7, 9)

>>> f2 = lazy_sum(1, 3, 5, 7, 9)

>>> f1==f2

False

( f1() 和 f2()的呼叫結果互不影響


https://blog.csdn.net/Asiling_H/article/details/81236446


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2168540/,如需轉載,請註明出處,否則將追究法律責任。

相關文章