1. 程式人生 > >【速學速記】lambda表達式的兩種應用場景「面試用到」

【速學速記】lambda表達式的兩種應用場景「面試用到」

功能 場景 一個 () 學python 狀態 參數 記錄 原型

  • lambda表達式
  • python書寫簡單,功能強大, 迅速發展成為 AI ,機器學習,深度學習的主要語言。

    今天花三分鐘,介紹Python中的lambda表達式,註意到,它只是一個表達式,不是語句啊。

    lambda的語法規則: 一個或多個參數以冒號終止輸入參數,這些參數可以理解為有名函數原型的輸入參數,以後是一個表達式,相當於有名函數的函數體部分。lambda的函數體部分,是作為返回值輸出部分。

    1. 兩種應用功能場景

    (1)map 和 reduce

    Python 中的 map 和 reduce,使用書寫很方便,詳細可參考: 【每天3分鐘學Python】Python中的 Map 和 Reduce 再結合 lambda表達式的話,使用起來會更加高效,如下所示:

    def sum(mylist):
    return reduce(lambda x, y: 2x + 1y, mylist)
    可以看到兩個輸入參數 x, y , 返回為 2*x + y ,通過這樣對 mylist 的元素完成化簡操作。

    (2) lambda 和 list 結合使用

    這個場景在面試中經常被問到,如下所示:

    li = [lambda :x for x in range(10)]
    得到一個 lambda 的list,看一看 li :

    [<function main.<listcomp>.<lambda>>,
    <function main.<listcomp>.<lambda>>,

    <function main.<listcomp>.<lambda>>,
    <function main.<listcomp>.<lambda>>,
    <function main.<listcomp>.<lambda>>,
    <function main.<listcomp>.<lambda>>,
    <function main.<listcomp>.<lambda>>,
    <function main.<listcomp>.<lambda>>,
    <function main.<listcomp>.<lambda>>,
    <function main.<listcomp>.<lambda>>]
    打印 li[0]() 會得到什麽,註意這種調用方法,因為是數組,先拿第一個元素,li[0],後面的括號表示調用lambda表達式。打印的結果為 0 嗎? NO!是 9

    lambda表達式不會形成對函數體內變量的記憶,只記錄最後一個狀態。 那麽如果lambda的入參中帶有x, 會得到我們想要的結果0 嗎?

    li = [lambda x :x for x in range(10)]
    res = li0
    print(res)
    輸出:0
    因此,需要註意區分這兩種寫法的不同,記得這個區別,在一次新浪面試中,曾經被問到。希望對大家有用。

    【速學速記】lambda表達式的兩種應用場景「面試用到」