Python全栈-magedu-2018-笔记18

第十一章 - Python 匿名函数

匿名函数

  • 匿名函数,即没有名字的函数
    • 没有名字如何定义
    • 没有名字如何调用
    • 如果能调用,如何使用

匿名函数

  • Python 借助 Lambda 表达式构建匿名函数
  • 格式
    • lambda 参数列表 : 表达式
      lambda x : x ** 2
      (lambda x : x ** 2)(4) # 调用
      foo = lambda x, y : (x + y) ** 2 # 不推荐这么用,因为用lambda就是为了匿名使用
      foo(2, 1)
      def foo(x,y): # 建议使用普通函数
        return (x + y) ** 2
      foo(2, 1)

匿名函数

  • 使用 lambda 关键字来定义匿名函数
  • 参数列表不需要小括号
  • 冒号是用来分割参数列表和表达式的
  • 不需要使用 return,表达式的值,就是匿名函数返回值
  • lambda 表达式(匿名函数)只能写在一行上,被称为单行函数
  • 用途
    • 在高阶函数传参时,使用 lambda 表达式,往往能简化代码

匿名函数

  • print((lambda :0)())
  • print((lambda x, y=3: x + y)(5))
  • print((lambda x, y=3: x + y)(5, 6))
  • print((lambda x, *, y=30: x + y)(5))
  • print((lambda x, *, y=30: x + y)(5, y=10))
  • print((lambda *args: (x for x in args))(*range(5)))
    • *args是可变位置参数组成一个元组 表达式是生成器表达式是惰性求值的 最后是实参解构
  • 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))] # map中的lambda中的表达式是在凑个元组

最后

本文的另外链接是:https://yindanny.github.io/python-magedu-2018-notes18.html

posted @ 2019-05-08 15:43  yindanny  阅读(177)  评论(0编辑  收藏  举报