溫馨提示×

溫馨提示×

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

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

一、高階函數(shù)、閉包

發(fā)布時(shí)間:2020-07-11 23:11:40 來源:網(wǎng)絡(luò) 閱讀:406 作者:siandd 欄目:開發(fā)技術(shù)

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

一個(gè)函數(shù)的參數(shù)是否可以接受另外一個(gè)函數(shù)作為參數(shù),這樣的函數(shù)就叫做高階函數(shù)。

最簡單的高階函數(shù)實(shí)例:

def func(x,y,z):
    return z(x)+z(y)
print(func(-20,-10,abs))

返回函數(shù)


高階函數(shù)除了可以接收函數(shù)參數(shù)之外,還可以把函數(shù)作為返回值

def func(*args):
    def sum():
        ax = 0
        for n in args:
            ax+=n
        return ax
    return sum

a = func(1,2,3,4,5,6)
print(a())

結(jié)果是:21

內(nèi)部函數(shù)可以引用外部函數(shù)的參數(shù)和局部變量,當(dāng)外部函數(shù)返回內(nèi)部函數(shù)時(shí),相關(guān)參數(shù)和變量都保存在返回的函數(shù)當(dāng)中,這就是閉包。

當(dāng)調(diào)用外部func函數(shù)的時(shí)候,每次調(diào)用都是返回一個(gè)新的的函數(shù),即使傳值是一致的,也會(huì)不一樣。例子如下:

def func(*args):
    def sum():
        ax = 0
        for n in args:
            ax+=n
        return ax
    return sum

a1 = func(1,2,3,4,5,6)
a2 = func(1,2,3,4,5,6)

print(a1==a2)

結(jié)果返回是False。

但是如果print(a1()==a2())是True ,調(diào)用的值是一樣的!


def count():
    fs = []
    for i in range(1,5):
        def f():
            return i*i*i
        fs.append(f)
    return fs

f1,f2,f3,f4 = count()
print(f1())
print(f2())
print(f3())
print(f4())

結(jié)果是:

64
64
64
64

--------------------------------------------------------------

def count():
    def f(i):
        def func():
            return i*i
        return func
    fs = []
    for var in range(1,5):
        fs.append(f(var))
    return fs
f1,f2,f3,f4 = count()
print(f1())
print(f2())
print(f3())
print(f4())

結(jié)果是:

1
4
9
16

劃重點(diǎn):返回函數(shù)不要應(yīng)用任何循環(huán)變量,或者后面會(huì)發(fā)生改變的變量。

向AI問一下細(xì)節(jié)
推薦閱讀:
  1. Python 閉包
  2. lua 閉包

免責(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