美文网首页
匿名函数

匿名函数

作者: 西西里加西 | 来源:发表于2020-04-22 00:02 被阅读0次

    匿名函数就是,没有名字的函数。

    函数没有名字该如何定义呢?函数没有名字又该如何调用?

    Lambda表达式

    python中,使用Lambda表达式来构建匿名函数。

    下面来看下基本语法:

    lambda x: x ** 2 #定义
    (lambda x: x ** 2)(4) # 调用
    

    举例:

    foo = lambda x,y: (x + y) ** 2
    foo(1, 2)
    
    # 等价于:
    
    def foo(x, y):
        return (x + y) ** 2
    foo(1, 2)
    
    • 使用lambda关键字定义匿名函数,格式为lambda[参数列表]:表达式
    • 参数列表不用小括号。无参就不写参数
    • 冒号用来分隔参数列表和表达式
    • 不需要使用return。表达式的值 ,就是匿名函数的值。表达式中不能出现等号
    • lambda表达式(匿名函数)只能写在一行上,也叫做单行函数
    • 匿名函数往往用在为高阶函数传参的时候,使用lambda表达式,往往能简化代码

    实例

    • 返回常量的匿名函数
    print((lambda :0)())
    
    • 加法匿名函数,带默认值
    print((lambda x=1:x)())  # 1
    print((lambda x=1:x)(3)) # 3
    
    print((lambda x=30,*,y: x + y)(y=20)) # 50
    print((lambda x=30,*,y: x + y)(10, y=20)) # 30
    print((lambda x=30,*,y: x + y)(10,20)) # TypeError: <lambda>() takes from 0 to 1 positional arguments but 2 were given
    
    • 可变参数
    print(lambda *args: (x for x in args)(*range(5)))
    print(lambda *args: [x+1 for x in args](*range(5)))
    print(lambda *args: {x%2 for x in args}(*range(5)))
    
    • 高阶函数

    一个函数可以接收另一个函数作为参数,这种函数就称之为高阶函数。

    [x for x in (lambda *args: map(lambda x: x+1, args))(*range(5))]
    [x for x in (lambda *args: map(lambda x: (x+1, args), args))(*range(5))]
    

    相关文章

      网友评论

          本文标题:匿名函数

          本文链接:https://www.haomeiwen.com/subject/myyvihtx.html