溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python常見內(nèi)置高階函數(shù)有哪些

發(fā)布時(shí)間:2021-12-03 11:32:19 來源:億速云 閱讀:204 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)Python常見內(nèi)置高階函數(shù)有哪些的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。


1.什么是高階函數(shù)?

  高階函數(shù):一個(gè)函數(shù)可以作為參數(shù)傳給另外一個(gè)函數(shù),或者一個(gè)函數(shù)的返回值為另外一個(gè)函數(shù)(若返回值為該函數(shù)本身,則為遞歸),滿足其一則為高階函數(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ù)名+括號(例如 bar()、foo() )-->調(diào)用該函數(shù)。

2.高階函數(shù)-map、filter、reduce

這三個(gè)函數(shù)均為高階函數(shù),其也為Python內(nèi)置的函數(shù)。接下來我們看一下這三個(gè)函數(shù)的用法以及其內(nèi)部原理是怎樣的:

2.1map函數(shù)

map函數(shù)接收的是兩個(gè)參數(shù),一個(gè)函數(shù),一個(gè)序列,其功能是將序列中的值處理再依次返回至列表內(nèi)。其返回值為一個(gè)迭代器對象--》例如: <map object at 0x00000214EEF40BA8> 。

其用法如圖:

Python常見內(nèi)置高階函數(shù)有哪些 

接下來我們看一下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)為迭代器對象

#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ù),其主要功能是過濾。其返回值也是迭代器對象,例如: <filter object at 0x000002042D25EA90>,

其圖示如下:

Python常見內(nèi)置高階函數(shù)有哪些

接下來我們看一下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è)為可迭代對象的高階函數(shù),其返回值為一個(gè)值而不是迭代器對象,故其常用與疊加、疊乘等,

圖示例如下:

Python常見內(nèi)置高階函數(shù)有哪些   

實(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常見內(nèi)置高階函數(shù)有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI