久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

十四,、Python lambda表達(dá)式及用法

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

回顧局部函數(shù)

回顧《Python函數(shù)高級用法》一節(jié)中,,get_math_func() 函數(shù)將返回三個局部函數(shù)之一,。該函數(shù)代碼如下:

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

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

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

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

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

  2. result=1

  3. # 該函數(shù)返回的是Lambda表達(dá)式

  4. if type == 'square':

  5. return lambda n: n * n # ①

  6. elif type == 'cube':

  7. return lambda n: n * n * n # ②

  8. else:

  9. return lambda n: (1 + n) * n / 2 # ③

  10. # 調(diào)用get_math_func(),,程序返回一個嵌套函數(shù)

  11. math_func = get_math_func("cube")

  12. print(math_func(5)) # 輸出125

  13. math_func = get_math_func("square")

  14. print(math_func(5)) # 輸出25

  15. math_func = get_math_func("other")

  16. print(math_func(5)) # 輸出15.0

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

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


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

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

從上面的語法格式可以看出 lambda 表達(dá)式的幾個要點:
  • lambda 表達(dá)式必須使用 lambda 關(guān)鍵字定義,。

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


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

例如,,對于如下 lambda 表達(dá)式:

lambda x , y:x + y

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

def add(x, y):
    return x+ y

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

總體來說,,函數(shù)比 lambda 表達(dá)式的適應(yīng)性更強,,lambda 表達(dá)式只能創(chuàng)建簡單的函數(shù)對象(它只適合函數(shù)體為單行的情形)。但 lambda 表達(dá)式依然有如下兩個用途:
  • 對于單行函數(shù),,使用 lambda 表達(dá)式可以省去定義函數(shù)的過程,,讓代碼更加簡潔。

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


下面代碼示范了通過 lambda 表達(dá)式來調(diào)用 Python 內(nèi)置的 map() 函數(shù):
  1. # 傳入計算平方的lambda表達(dá)式作為參數(shù)

  2. x = map(lambda x: x*x , range(8))

  3. print([e for e in x]) # [0, 1, 4, 9, 16, 25, 36, 49]

  4. # 傳入計算平方的lambda表達(dá)式作為參數(shù)

  5. y = map(lambda x: x*x if x % 2 == 0 else 0, range(8))

  6. print([e for e in y]) # [0, 0, 4, 0, 16, 0, 36, 0]

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

總結(jié)

本節(jié)所介紹的 lambda 表達(dá)式是 Python 編程的核心機(jī)制之一,。Python 語言既支持面向過程編程,也支持面向?qū)ο缶幊?。?lambda 表達(dá)式是 Python 面向過程編程的語法基礎(chǔ),,因此讀者必須引起重視。

Python 的 lambda 表達(dá)式只是單行函數(shù)的簡化版本,,因此 lambda 表達(dá)式的功能比較簡單,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多