zoukankan      html  css  js  c++  java
  • python匿名函数

    匿名函数就是没有名字的函数,它定义的关键字是lambda,之后是一系列的参数,然后用冒号隔开,最后则是由这些参数组成的表达式。

    lambda x:x**2#定义
    (lambda x:x**2)(3)#调用
    
    结果:
    9
    
    foo = lambda x,y:(x+y)**2#不建议这样用,这样建议使用普通函数
    foo(1,2)
    
    结果为:
    9
    
    def foo(x,y):
        return (x+y)**2
    foo(1,2)
    
    结果:
    9

    匿名函数定义的时候,参数不需要小括号,之间逗号之间隔开就好了,后面的冒号用来分割开参数和表达式,同时,它不需要return,表达式的值就是匿名函数的返回值。

    lambda表达式只能写在一行上面,被称为单行函数,在高阶函数传参时,用匿名函数, 往往能简化代码。lambda也可以用在列表内部。

    [(lambda x:x*x)(x)for x in range(10)]
    
    结果为:
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    
    
    a  = [(1,20),(3,0),(9,10),(2,-1)]
    a.sort(key = lambda x:x[1])#按列表元祖的第二个元素排序
    print(a)
    
    结果为:
    [(2, -1), (3, 0), (9, 10), (1, 20)]

    使用lambda表达式可以模块化代码,同时可以减少代码的重复性。比如要对一个列表的数字都平方。这个时候就可以使用它。

    a = map(lambda x: x**2, [1, 2, 3, 4, 5])
    print(list(a))
    
    结果为:
    [1, 4, 9, 16, 25]
    
    def spq(x):
        return x*x
    a = map(spq,[1,2,3,4,5])
    print(list(a))
    
    结果为:
    [1, 4, 9, 16, 25]
    print((lambda :0)())
    
    结果为:
    0
    
    print((lambda x,y=3:x+y)(5))
    
    结果为:
    8
    
    print((lambda x,y=3:x+y)(4,5))
    
    结果为:
    9
    
    print((lambda x,*,y=30:x+y)(5))
    
    结果为:
    35
    
    print((lambda x, *, y=30: x + y)(5, y=10))
    
    结果为:
    15
    
    print((lambda *args: (x for x in args))(*range(5)))
    
    结果为:
    <generator object <lambda>.<locals>.<genexpr> at 0x03FE56B0>
    
    print((lambda *args: [x+1 for x in args])(*range(5)))
    
    结果为:
    [1, 2, 3, 4, 5]
    
     print((lambda *args: {x+2 for x in args})(*range(5)))
    
    结果为:
    {2, 3, 4, 5, 6}
    
    [x for x in (lambda *args: map(lambda x: x+1, args))(*range(5))]
    
    结果为:
    [1, 2, 3, 4, 5]
    
    [x for x in (lambda *args: map(lambda x: (x+1,args), args))(*range(5))]
    
    结果为:
    [(1, (0, 1, 2, 3, 4)),
     (2, (0, 1, 2, 3, 4)),
     (3, (0, 1, 2, 3, 4)),
     (4, (0, 1, 2, 3, 4)),
     (5, (0, 1, 2, 3, 4))]

     

     
  • 相关阅读:
    基础算法(C#)
    Mac系统Docker安装Redis
    Mac系统Docker安装jenkins
    设计模式-缓存驻留模式
    设计模式列表
    vs问题---...inDebugJns.Gaea.dll”标记为系统必备组件,必须对其进行强签名。
    vs问题--------------标记为系统必备组建
    Excel--------Excel实现数据对比
    IIS--------问题解决(.net开发中localhost可以访问,本地ip不可以)
    .NET--------枚举扩展方法(枚举转list,获取枚举描述)
  • 原文地址:https://www.cnblogs.com/xpc51/p/11481378.html
Copyright © 2011-2022 走看看