Python 返回函式+匿名函式
返回函式
粗粗看了一遍學習資料,感覺返回函式的意思好理解,但是實際應用起來就有點麻煩了。
先捋一捋思路叭。
首先,高階函式除了能接收函式作為引數外,也能將函式作為結果值返回。
函式作為返回值
拿 求和 做個簡單的例子:
一般的求和函式我們會這樣寫:
>>> 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python函式程式設計 返回函式 匿名函式 裝飾器 偏函式Python函式程式設計
- 匿名函式(Python)函式Python
- Python匿名函式Python函式
- Python函式與lambda 表示式(匿名函式)Python函式
- 1.5.7 Python匿名函式Python函式
- js函式 函式自呼叫 返回函式的函式 (閉包)JS函式
- C++ 返回函式指標的函式C++函式指標
- 深入理解 函式、匿名函式、自執行匿名函式函式
- Python技法3:匿名函式、回撥函式和高階函式Python函式
- python匿名函式的好處Python函式
- Python匿名函式快速入門Python函式
- 初學 Python(十三)——匿名函式Python函式
- Python中的匿名函式-lambdaPython函式
- PHP匿名函式PHP函式
- Ruby 匿名函式函式
- Golang匿名函式Golang函式
- JavaScript 匿名函式JavaScript函式
- Go 匿名函式Go函式
- JavaScript匿名函式JavaScript函式
- 第 8 節:函式-匿名函式、遞迴函式函式遞迴
- 閉包函式(匿名函式)的理解函式
- PHP 匿名函式初探PHP函式
- 兄弟連go教程(14)函式 - 匿名函式Go函式
- 初識Lambda表示式(匿名函式)函式
- Python函數語言程式設計-高階函式、匿名函式、裝飾器、偏函式Python函數程式設計函式
- 如何使用python中的返回函式?Python函式
- python返回函式有什麼作用?Python函式
- lambda匿名函式sorted排序函式filter過濾函式map對映函式函式排序Filter
- 【C++】函式返回函式指標的多種定義方式C++函式指標
- PHP 核心特性 - 匿名函式PHP函式
- 裝飾器,匿名函式函式
- js中的匿名函式JS函式
- Js匿名函式小指南JS函式
- JavaScript 匿名函式 閉包JavaScript函式
- 從settTimeout到匿名函式、箭頭函式之() => {}函式
- 好程式設計師Python教程系列遞迴函式與匿名函式呼叫程式設計師Python遞迴函式
- (011)我們一起學Python;匿名函式,遞迴函式Python函式遞迴
- 塊級作用域替代“匿名立即執行函式表示式(匿名IIFE)”函式