闲话不表,直接入正题吧。
lambda
lambda 可以被看作匿名函数,也就是一种没有用到函数标识符def的函数。
def add(a, b):
return a + b
if __name__ == "__main__":
a1 = lambda x, y: x + y
print(a1(5, 6))
a2 = add
print(a2(5, 6))
这里我们lambda表达式其实和函数add在功能上是等价的。
lambda表达式有点类似于C语言的宏定义。
filter
filter是Python的内置函数之一,可以用来对 list等可迭代对象的元素进行处理。
语法:filter(function, iterable)
filter函数至少有两个必要的位置参数,第一个参数是函数名或者lambda表达式(函数必须是一个参数), 第二个参数是一个可迭代对象。
def square(a):
return a * a
if __name__ == "__main__":
f1 = filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5])
print(list(f1))
f2 = filter(square, [1, 2, 3, 4, 5])
print(list(f2))
PS: filter的返回值在python2和pytho3里是不同的, python3返回filter对象,但可以用list()进行转化,也支持直接迭代。
map
map是Python的内置函数之一,可以用来对 list等可迭代对象的元素进行处理。
map函数至少有两个必要的位置参数,第一个参数是函数名或者lambda表达式(函数必须是一个参数), 第二个参数是一个可迭代对象。map函数也可以支持多个列表,前提是列表的数量必须和lambda表达式的参数数量相等。
def square(a):
return a * a
if __name__ == "__main__":
m1 = map(lambda x: x * x, [1, 2, 3, 4, 5])
print(list(m1))
m2 = map(square, [1, 2, 3, 4, 5])
print(list(m2))
PS:
1. map的返回值在python2和pytho3里是不同的, python3返回map对象,但可以用list()进行转化,也支持直接迭代。
2. map函数和filter函数很类似,不同的地方在于,filter可以对可迭代对象的元素进行删选或者处理, 而map对象只能对可迭代对象的元素进行处理(map函数返回的元素必须和可迭代对象的元素一一对应的)。
reduce
reduce是Python2的内置函数之一(python3必须引入:from functools import reduce),可以用来对 list等可迭代对象的元素进行累积操作(比如累加)。
reduce函数至少有两个必要的位置参数,第一个参数是函数名或者lambda表达式(函数必须是两个参数), 第二个参数是一个可迭代对象。
from functools import reduce
def add(a, b):
return a + b
if __name__ == "__main__":
r1 = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5])
print(r1)
r2 = reduce(add, [1, 2, 3, 4, 5])
print(r2)
待续......