怎么應(yīng)用Pythonlambda-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)老邊,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108

怎么應(yīng)用Python lambda?相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

lambda 表達(dá)式是現(xiàn)代編程語言爭相引入的一種語法,如果說函數(shù)是命名的、方便復(fù)用的代碼塊,那么 lambda 表達(dá)式則是功能更靈活的代碼塊,它可以在程序中被傳遞和調(diào)用。

回顧局部函數(shù)

get_math_func() 函數(shù)將返回三個(gè)局部函數(shù)之一。該函數(shù)代碼如下:

def get_math_func(type) :
    # 定義三個(gè)局部函數(shù)
    ...
    # 返回局部函數(shù)
    if type == "square" :
        return square
    if type == "cube" :
        return cube
    else:
        return factorial

由于局部函數(shù)的作用域默認(rèn)僅停留在其封閉函數(shù)之內(nèi),因此這三個(gè)局部函數(shù)的函數(shù)名的作用太有限了,即僅僅是在程序的 if 語句中作為返回值使用。一旦離開了 get_math_func() 函數(shù)體,這三個(gè)局部函數(shù)的函數(shù)名就失去了意義。

既然局部函數(shù)的函數(shù)名沒有太大的意義,那么就考慮使用 lambda 表達(dá)式來簡化局部函數(shù)的寫法。

使用 lambda 表達(dá)式代替局部函數(shù)

如果使用 lambda 表達(dá)式來簡化 get_math_func() 函數(shù),則可以將程序改寫成如下形式:

def get_math_func(type) :
    result=1
    # 該函數(shù)返回的是Lambda表達(dá)式
    if type == 'square':
        return lambda n: n * n  # ①
    elif type == 'cube':
        return lambda n: n * n * n  # ②
    else:
        return lambda n: (1 + n) * n / 2 # ③
# 調(diào)用get_math_func(),程序返回一個(gè)嵌套函數(shù)
math_func = get_math_func("cube")
print(math_func(5)) # 輸出125
math_func = get_math_func("square")
print(math_func(5)) # 輸出25
math_func = get_math_func("other")
print(math_func(5)) # 輸出15.0

在上面代碼中,return 后面的部分使用 lambda 關(guān)鍵字定義的就是 lambda 表達(dá)式,Python 要求 lambda 表達(dá)式只能是單行表達(dá)式。

注意:由于 lambda 表達(dá)式只能是單行表達(dá)式,不允許使用更復(fù)雜的函數(shù)形式,因此上面 ③ 號代碼處改為計(jì)算 1+2+3+…+n 的總和。

lambda 表達(dá)式的語法格式如下:

lambda [parameter_list] : 表達(dá)式

從上面的語法格式可以看出 lambda 表達(dá)式的幾個(gè)要點(diǎn):

lambda 表達(dá)式必須使用 lambda 關(guān)鍵字定義。

在 lambda 關(guān)鍵字之后、冒號左邊的是參數(shù)列表,可以沒有參數(shù),也可以有多個(gè)參數(shù)。如果有多個(gè)參數(shù),則需要用逗號隔開,冒號右邊是該 lambda 表達(dá)式的返回值。

實(shí)際上,lambda 表達(dá)式的本質(zhì)就是匿名的、單行函數(shù)體的函數(shù)。因此,lambda 表達(dá)式可以寫成函數(shù)的形式。例如,對于如下 lambda 表達(dá)式:

lambda x , y:x + y

可改寫為如下函數(shù)形式:

def add(x, y): return x+ y上面定義函數(shù)時(shí)使用了簡化語法:當(dāng)函數(shù)體只有一行代碼時(shí),可以直接把函數(shù)體的代碼放在與函數(shù)頭同一行。

總體來說,函數(shù)比 lambda 表達(dá)式的適應(yīng)性更強(qiáng),lambda 表達(dá)式只能創(chuàng)建簡單的函數(shù)對象(它只適合函數(shù)體為單行的情形)。但 lambda 表達(dá)式依然有如下兩個(gè)用途:

對于單行函數(shù),使用 lambda 表達(dá)式可以省去定義函數(shù)的過程,讓代碼更加簡潔。

對于不需要多次復(fù)用的函數(shù),使用 lambda 表達(dá)式可以在用完之后立即釋放,提高了性能。

下面代碼示范了通過 lambda 表達(dá)式來調(diào)用 Python 內(nèi)置的 map() 函數(shù):

# 傳入計(jì)算平方的lambda表達(dá)式作為參數(shù)
x = map(lambda x: x*x , range(8))
print([e for e in x]) # [0, 1, 4, 9, 16, 25, 36, 49]
# 傳入計(jì)算平方的lambda表達(dá)式作為參數(shù)
y = map(lambda x: x*x if x % 2 == 0 else 0, range(8))
print([e for e in y]) # [0, 0, 4, 0, 16, 0, 36, 0]

正如從上面代碼所看到的,內(nèi)置的 map() 函數(shù)的第一個(gè)參數(shù)需要傳入函數(shù),此處傳入了函數(shù)的簡化形式:lambda 表達(dá)式,這樣程序更加簡潔,而且性能更好。

看完上述內(nèi)容,你們掌握怎么應(yīng)用Python lambda的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝各位的閱讀!

當(dāng)前標(biāo)題:怎么應(yīng)用Pythonlambda-創(chuàng)新互聯(lián)
文章出自:http://muchs.cn/article36/pdspg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、網(wǎng)站內(nèi)鏈軟件開發(fā)、網(wǎng)站排名、網(wǎng)站改版虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)