乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

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

      回顧局部函數(shù)

      回顧《Python函數(shù)高級(jí)用法》一節(jié)中,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 語(yǔ)句中作為返回值使用。一旦離開了 get_math_func() 函數(shù)體,這三個(gè)局部函數(shù)的函數(shù)名就失去了意義。

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

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

      如果使用 lambda 表達(dá)式來(lái)簡(jiǎn)化 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(),程序返回一個(gè)嵌套函數(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ù)形式,因此上面 ③ 號(hào)代碼處改為計(jì)算 1+2+3+…+n 的總和。


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

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

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

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


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

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

      lambda x , y:x + y

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

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

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

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

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


      下面代碼示范了通過(guò) lambda 表達(dá)式來(lái)調(diào)用 Python 內(nèi)置的 map() 函數(shù):
      1. # 傳入計(jì)算平方的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. # 傳入計(jì)算平方的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ù)的第一個(gè)參數(shù)需要傳入函數(shù),此處傳入了函數(shù)的簡(jiǎn)化形式:lambda 表達(dá)式,這樣程序更加簡(jiǎn)潔,而且性能更好。

      總結(jié)

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

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

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

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多