zoukankan      html  css  js  c++  java
  • python学习:函数---匿名函数 lambda

    语法:
        lambda [arg1 [,arg2,.....argn]]:expression
    
    说明:
        lambda 只是一个表达式,函数体比 def 简单很多。
        lambda 主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
        lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
        lambda 可以有多个参数,参数之间用逗号隔开。
        lambda 函数只能写一行。

    例题:

    func = lambda x:(x[0],x[2])
    print(func('hello'))  # ('h', 'l')
    
    func = lambda x,y: x if x > y else y
    print(func(3,100))  # 100
    
    dic = {'k1':20,'k2':100,'k3':40}
    print(max(dic))  # k3
    print(max(dic,key=lambda k:dic[k]))  # k2
    
    ret = map(lambda x: x ** 2, [1, 2, 3, 4, 5])
    print(list(ret)) # [1, 4, 9, 16, 25]
    
    # 提供了两个列表,对相同位置的列表数据进行相加
    ret = map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8])
    print(list(ret)) #[3, 7, 11, 15, 19]
    
    ret = sorted([30,6,-10,88,-20,22], key=lambda x: x*-1)
    print(list(ret)) # [88, 30, 22, 6, -10, -20]
    
    ret = filter(lambda x:x<0,[30,6,-10,88,-20,22])
    print(list(ret)) # [-10, -20]
    
    # 两个元组(('a'),('b')),(('c'),('d')),请使用匿名函数生成列表[{'a':'c'},{'b':'d'}]
    t1 = (('a'),('b'))
    t2 = (('c'),('d'))
    #答案一
    test = lambda t1,t2 :[{i:j} for i,j in zip(t1,t2)]
    print(test(t1,t2))
    #答案二
    print(list(map(lambda t:{t[0]:t[1]},zip(t1,t2))))
    #答案三
    print([{i:j} for i,j in zip(t1,t2)])
    
    # 数组/字典的排序
    array = [{"age":20,"name":"a"},{"age":25,"name":"b"},{"age":10,"name":"c"}]
    array = sorted(array,key=lambda x:x["age"])
    print(array)
    
    # 先按照成绩降序排序,相同成绩的按照名字升序排序
    array = [{'name':'alice', 'score':38}, {'name':'bob', 'score':18}, {'name':'darl', 'score':28}, {'name':'christ', 'score':28}]
    l = sorted(array, key=lambda x:(-x['score'], x['name']))
    print(l)
    
    def multipliers():
        return [lambda x:i*x for i in range(4)] # 相当于返回了四个lambda x:i*x,return的时候i=3
    print([m(2) for m in multipliers()]) # [6, 6, 6, 6]
    
    def multipliers():
        return (lambda x:i*x for i in range(4)) # 生成器表达式,返回的是一个生成器,调用一次return才执行一次
    print([m(2) for m in multipliers()]) # [0, 2, 4, 6]
  • 相关阅读:
    测试文件报告
    Bug Variations
    阶段一 问答题2
    阶段一 问答题1
    HeapSort
    Git系列 (01):git clone 速度太慢解决方法
    ES6系列 (03):链判断运算符和Null 判断运算符
    ES6系列 (02):解构赋值
    ES6系列 (01):箭头函数this指向问题
    我忘却了所有,抛却了信仰,舍弃了轮回,只为,那曾在佛前哭泣的玫瑰,早已失去旧日的光泽。
  • 原文地址:https://www.cnblogs.com/Ryan-Fei/p/12213412.html
Copyright © 2011-2022 走看看