匿名函數-lambda

來源:互聯網
上載者:User

標籤:multi   簡單   ++   命名   return   for迴圈   tip   產生器   元組   

匿名函數-lambda

匿名函數    lambda [arg1 [,arg2,.....argn]]:expression    lambda只是一個運算式,函數體比def簡單很多。    lambda的主體是一個運算式,而不是一個代碼塊。僅僅能在lambda運算式中封裝有限的邏輯進去。    lambda函數擁有自己的命名空間,且不能訪問自有參數列表之外或全域命名空間裡的參數。    雖然lambda函數看起來只能寫一行,卻不等同於C或C++的內嵌函式,後者的目的是調用小函數時不佔用棧記憶體從而增加運行效率。    exp:        dic = {‘k1‘: 10, ‘k2‘: 50, ‘k3‘: 100, ‘k4‘: 80}        print(max(dic,key=lambda k:dic[k]))    內建函數中參數帶key的有以下:    max min filter map sorted    以上都可以通過和lambda合用完成一些功能    exp2:    現有兩元組tup1,tup2,請使用匿名函數生產列表lst    tup1 = ((‘a‘),(‘b‘))    tup2 = ((‘c‘),(‘d‘))    lst = [{‘a‘:‘c‘},{‘b‘:‘d‘}]    寫法1:自己寫的    lst = lambda x,y: [{(x[i][0]):y[i][0]} for i in range(len(x))]    print(lst(tup1,tup2))        [{‘a‘: ‘c‘}, {‘b‘: ‘d‘}]    寫法2:    tup1 = ((‘a‘),(‘b‘))    tup2 = ((‘c‘),(‘d‘))    # lst = [{‘a‘:‘c‘},{‘b‘:‘d‘}]    # ret = zip(tup1,tup2)    # def func(t):    #     return {t[0]:t[1]}    # func = lambda t:{t[0]:t[1]}    # res = map(lambda t:{t[0]:t[1]},zip(tup1,tup2))    print(list(map(lambda t:{t[0]:t[1]},zip(tup1,tup2))))    exp3.以下代碼的輸出是什嗎?請給出答案並解釋。    def multipliers():        return [lambda x:i*x for i in range(4)]    print([m(2) for m in multipliers()])    請修改multipliers的定義來產生期望的結果。    解析:        def multipliers():            return [lambda x : i *x for i in range(4)]  #返回列表推導式 [lambda x : i *x,lambda x : i *x,lambda x : i *x,lambda x : i *x]        print([m(2) for m in multipliers()])        # [m(2) for m in [lambda x : i *x,lambda x : i *x,lambda x : i *x,lambda x : i *x]]        # multipliersw()為[lambda x : i *x,lambda x : i *x,lambda x : i *x,lambda x : i *x]        # [m(2) for m in [lambda x : i *x,lambda x : i *x,lambda x : i *x,lambda x : i *x]]        # m 為 lambda x : i *m,  4次        # m(2)   [lambda x : i *2,lambda x : i *2,lambda x : i *2,lambda x : i *2]]        #而此時multipliers()中的for迴圈已執行完,i最後的值為3        # 所以 [lambda x : 3 *2,lambda x : 3 *2,lambda x : 3 *2,lambda x : 3 *2]]        #[6, 6, 6, 6]    exp4.以下代碼的輸出是什嗎?請給出答案並解釋。        def multipliers():            return (lambda x : i *x for i in range(4))  #返回一個產生器 g =(lambda x : i *x for i in range(4)        print([m(2) for m in multipliers()])        # [m(2) for m in multipliers()]        # [m(2) for m in (lambda x : i *x for i in range(4)]        # [m(2) for m in (lambda x : 0 *x,lambda x : 1 *x,lambda x : 2 *x,lambda x : 3 *x]        # [2 * 0,,2 * 1, 2 * 2,2 * 3]        #[0,2,4,6]

  

匿名函數-lambda

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.