lambda 函数是一个简短的匿名函数,这里介绍它的经典用法。
语法
lambda 语法: lambda 参数列表(支持多个参数):计算表达式
lambda x,y,z:x+y+z
经典用法
- filter() 方法借助于一个函数来过滤给定的序列,该函数测试序列中的每个元素是否为真。
- 基础语法:filter(fun, iterable)
- 参数:fun 测试 iterable 序列中的每个元素执行结果是否为 True,iterable 为被过滤的可迭代序列
- 返回值:filter object
def is_upper(c):
# 字母为大写时为 True
return ord(c)<ord('a')
# 因为 filter 返回的是一个 filter object,所以输出的时候需要用 list 进行转换
print(list(filter(is_upper, 'AbCdEfG')))
## 输出结果: ['A', 'C', 'E', 'G']
-
filter with lambda:
print(list(filter(lambda x:ord(x)<ord('a'), 'AbCdEfG')))
-
map() 函数的主要作用是可以把一个方法依次执行在一个可迭代的序列上,比如 List 等。
- 基础语法:map(fun, iterable)
- 参数:fun 依次处理 iterable 中的所有元素,iterable 为被过滤的可迭代序列
- 返回值:map object
def roll(c):
# 字符加 1, a 变 b
return chr(ord(c)+1)
# 因为 filter 返回的是一个 map object,所以输出的时候需要用 list 进行转换
print(list(map(roll, 'abcdef')))
## 输出结果: ['b', 'c', 'd', 'e', 'f', 'g']
-
map with lambda:
print(list(map(lambda x:chr(ord(x)+1), 'abcdef')))
-
reduce() 函数用于在列表(可迭代序列)上执行某些计算并返回结果,它将滚动计算列表中的所有元素,并得出统计结果。
- 基础语法:reduce(fun, iterable)
- 参数:fun 有两个参数,一个对应于 iterable 每一个元素的方法,另一个为上一次执行的结果,iterable 为被过滤的可迭代序列
- 返回值:最终的 fun 的返回结果
- Python3 中 reduce 不在作为保留字,该函数转移到了 包中
from functools import reduce
def sum(x,y):
return x+y
print(reduce(sum, [1, 2, 3, 4]))
- reduce with lambda:
print(reduce((lambda x,y:x+y), [1, 2, 3, 4]))
错误的例子
不要在赋值语句中使用lambda
,相比较于显式的def语句,lambda
的唯一优势是能镶嵌在一个很长的表达式里,而不是用来代替 def。
# 推荐的写法:
def f(x): return 2*x
# 不推荐的写法:
f = lambda x: 2*x