Python常見(jiàn)內(nèi)置高階函數(shù)即高階函數(shù)用法
1.什么是高階函數(shù)?
高階函數(shù):一個(gè)函數(shù)可以作為參數(shù)傳給另外一個(gè)函數(shù),或者一個(gè)函數(shù)的返回值為另外一個(gè)函數(shù)(若返回值為該函數(shù)本身,則為遞歸),滿(mǎn)足其一則為高階函數(shù)。
參數(shù)為函數(shù):
#參數(shù)為函數(shù)
def bar():
print("in the bar..")
def foo(func):
func()
print("in the foo..")
foo(bar)
返回值為函數(shù):
#返回值為函數(shù)
def bar():
print("in the bar..")
def foo(func):
print("in the foo..")
return bar
res=foo(bar)
res()
以上兩個(gè)示例中,函數(shù)foo()為高階函數(shù),示例一中函數(shù)bar作為foo的參數(shù)傳入,示例二中函數(shù)bar作為foo的返回值。
注:函數(shù)名(例如bar 、foo)-->其為該函數(shù)的內(nèi)存地址;函數(shù)名+括號(hào)(例如 bar()、foo() )-->調(diào)用該函數(shù)。
2.高階函數(shù)-map、filter、reduce
這三個(gè)函數(shù)均為高階函數(shù),其也為Python內(nèi)置的函數(shù)。接下來(lái)我們看一下這三個(gè)函數(shù)的用法以及其內(nèi)部原理是怎樣的:
2.1map函數(shù)
map函數(shù)接收的是兩個(gè)參數(shù),一個(gè)函數(shù),一個(gè)序列,其功能是將序列中的值處理再依次返回至列表內(nèi)。其返回值為一個(gè)迭代器對(duì)象--》例如: <map object at 0x00000214EEF40BA8> 。
其用法如圖:
?
接下來(lái)我們看一下map函數(shù)的機(jī)制是怎么樣的:
num=[1,2,3,4,5]
def square(x):
return x**2
#map函數(shù)模擬
def map_test(func,iter):
num_1=[]
for i in iter:
ret=func(i)
# print(ret)
num_1.append(ret)
return num_1.__iter__() #將列表轉(zhuǎn)為迭代器對(duì)象
#map_test函數(shù)
print(list(map_test(square,num)))
#map函數(shù)
print(list(map(square,num)))
#當(dāng)然map函數(shù)的參數(shù)1也可以是匿名函數(shù)、參數(shù)2也可以是字符串
print(list(map_test(lambda x:x.upper(),"amanda")))
print(list(map(lambda x:x.upper(),"amanda")))
2.2filter函數(shù)
filter函數(shù)也是接收一個(gè)函數(shù)和一個(gè)序列的高階函數(shù),其主要功能是過(guò)濾。其返回值也是迭代器對(duì)象,例如: <filter object at 0x000002042D25EA90>,
其圖示如下:

接下來(lái)我們看一下filter函數(shù)的用法以及其機(jī)制是怎么樣的:
names=["Alex","amanda","xiaowu"]
#filter函數(shù)機(jī)制
def filter_test(func,iter):
names_1=[]
for i in iter:
if func(i): #傳入的func函數(shù)其結(jié)果必須為bool值,才有意義
names_1.append(i)
return names_1
#filter_test函數(shù)
print(filter_test(lambda x:x.islower(),names))
#filter函數(shù)
print(list(filter(lambda x:x.islower(),names)))
2.3reduce函數(shù)
reduce函數(shù)也是一個(gè)參數(shù)為函數(shù),一個(gè)為可迭代對(duì)象的高階函數(shù),其返回值為一個(gè)值而不是迭代器對(duì)象,故其常用與疊加、疊乘等,
圖示例如下:
實(shí)例如下:
#reduce函數(shù)不是內(nèi)置函數(shù),而是在模塊functools中的函數(shù),故需要導(dǎo)入
from functools import reduce
nums=[1,2,3,4,5,6]
#reduce函數(shù)的機(jī)制
def reduce_test(func,array,ini=None): #ini作為基數(shù)
if ini == None:
ret =array.pop(0)
else:
ret=ini
for i in array:
ret=func(ret,i)
return ret
#reduce_test函數(shù),疊乘
print(reduce_test(lambda x,y:x*y,nums,100))
#reduce函數(shù),疊乘
print(reduce(lambda x,y:x*y,nums,100))
到此這篇關(guān)于Python常見(jiàn)內(nèi)置高階函數(shù)即敢接函數(shù)用法的文章就介紹到這了,更多相關(guān)Python高階函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
手把手教你用python搶票回家過(guò)年(代碼簡(jiǎn)單)
下面給大家分享一個(gè)使用Python寫(xiě)一個(gè)命令行版的火車(chē)票查看器, 只要在命令行敲一行命令就能獲得你想要的火車(chē)票信息,具體實(shí)現(xiàn)代碼大家參考下本文2018-01-01
python用sqlacodegen根據(jù)已有數(shù)據(jù)庫(kù)(表)結(jié)構(gòu)生成對(duì)應(yīng)SQLAlchemy模型
本文介紹了如何使用sqlacodegen獲取數(shù)據(jù)庫(kù)所有表的模型類(lèi),然后使用ORM技術(shù)進(jìn)行CRUD操作,有此需求的朋友可以了解下本文2021-06-06
pycharm from lxml import etree標(biāo)紅問(wèn)題及解決
這篇文章主要介紹了pycharm from lxml import etree標(biāo)紅問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
如何利用python?turtle繪圖自定義畫(huà)布背景顏色
Turtle庫(kù)是Python語(yǔ)言中一個(gè)很流行的繪制圖像的函數(shù)庫(kù),想象一個(gè)小烏龜,在一個(gè)橫軸為x、縱軸為y的坐標(biāo)系原點(diǎn),(0,0)位置開(kāi)始,這篇文章主要給大家介紹了關(guān)于如何利用python?turtle繪圖自定義畫(huà)布背景顏色的相關(guān)資料,需要的朋友可以參考下2021-12-12
使用Python操作MySQL數(shù)據(jù)庫(kù)的教程詳解
在這篇文章中,主要為大家詳細(xì)介紹如何在Python中使用pymysql模塊來(lái)操作MySQL數(shù)據(jù)庫(kù),文中的示例代碼簡(jiǎn)介易懂,需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-07-07
python實(shí)現(xiàn)簡(jiǎn)單的計(jì)時(shí)器功能函數(shù)
這篇文章主要介紹了python實(shí)現(xiàn)簡(jiǎn)單的計(jì)時(shí)器功能函數(shù),涉及Python操作時(shí)間的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
Python正則表達(dá)式re.compile()和re.findall()詳解
re?模塊提供了不少有用的函數(shù),用以匹配字符串,下面這篇文章主要給大家介紹了關(guān)于Python正則表達(dá)式re.compile()和re.findall()的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07

