lambda表达式
Python中使用lambda表达式构建匿名函数。
- 语法 (lambda 形参:表达式)(实参)表达式不能有等号 且表达式只能写一句。
# 一.
def add(x, y):
return x + y
# 二.
add = lambda x, y:x + y
# 三.
[lambda x, y:x + y][0](1, 2)
以上三种等价
注意形参可以不写但表达式必须的写!!
- 参数列表不需要小括号,无参就不要写参数
- 冒号用来分割参数列表和表达式部分
- 不需要使用return。表达式的值,就是匿名函数的返回值, 表达式中不能出现等号
- lambda表达式(匿名函数)只能写在一行上,也称为单行函数。
匿名函数往往用在为高阶函数传参时,使用lambda表达式,往往能简化代码
# 以sorted函数变一下
list_ = [1, 4, 7, 6]
lis = sorted(list_, key = lambda x:ord(x) if isinstance(x, str) else x)
print(lis)
# 等价于
def lis_(x):
if isinstance(x, str):
return ord(x)
return x
lis__ = sorted(list_, key = lis_)
print(lis__)
结果:
[1, 4, 6, 7]
[1, 4, 6, 7]
lambda其他使用方法
[x for x in (lambda *args:map(lambda x: x + 1, args))(*range(5))]
#[1, 2, 3, 4, 5]
[i for i in (lambda *args : map(lambda x: x+1, args))(*range(10))]
#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
(lambda *args : [i for i in args])(*range(10))
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
函数和函数间的调用
def fn(x):
return x + 1
foo = lambda args : fn(args)
foo(2)
# 3