匿名函数

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

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

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: () 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))]

你可能感兴趣的:(匿名函数)