匿名函数就是,没有名字的函数。
函数没有名字该如何定义呢?函数没有名字又该如何调用?
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))]
网友评论