1、 lambda
在Python中,lambda函数的函数体有且仅有一条语句,即返回值的表达式语句,它比def简单许多。格式如下:
返回函数名 = lambda 参数列表:函数返回值表达式语句
参数列表是可以选择的,如果有多个参数,就用逗号将这些参数隔开。函数返回值的表达式语句不能含有循环、分支、return语句或yield语句,但是允许使用条件表达式。lambda函数的结果是一个匿名函数,当调用lambda函数时,返回的是表达式语句计算所得到的结果。
例:使用lambda函数计算两个数之和。 sum = lambda x, y: x + y print(sum(1, 2))
2、 zip
zip函数可以接受一系列可迭代的对象作为参数,调用zip函数时,它按顺序将这一些相对应的元素都变为一个个元组,再返回这些元组所组成的列表。
例:使用zip函数的实例。 x = [1, 2] y = [3, 4] z = [5, 6] result= zip(x, y, z) for n in result: print(n) 运行结果: (1, 3, 5) (2, 4, 6) 将打包结果解压。 unzip = zip(*result) for n in unzip: print(n) 运行结果: (1, 2) (3, 4) (5, 6)
3、 map
map函数和reduce函数类似,都需要接收两个参数:一个映射函数,一个序列。但是map函数的工作原理与reduce函数不同,map函数是对序列中的每一个元素都调用映射函数,最终返回一个新的序列。格式如下:
最终序列 = map(映射函数,序列1[,序列2…])
在map函数的参数中,可以存在着多个序列,但序列的个数取决于映射函数的参数个数。
例:使用map函数的实例。 list = [1, 2, 3, 4, 5] def add(x): return x + 1 result = map(add, list) for n in result: print(n) 运行结果: 2 3 4 5 6
在上例中,映射函数是add()函数,由于add()函数只有一个参数x,所以map()函数中只能有一个序列参数,即list序列。调用map()函数的时候,将list序列中的所有元素都调用add()函数,计算结果以数组形式返回,然后通过for循环,打印出数组里的所有元素。
例: 使用map函数对两个序列进行操作的实例。 list1 = [1, 2, 3]; list2 = [4, 5, 6]; def add(x, y): return x*100 +y*10; result = map(add,list1,list2); for n in result: print(n); 运行结果: 140 250 360
4、 reduce
reduce函数就是将指定的序列中每个元素按一定的规则调用指定函数,最后返回最终结果。格式如下:
最终结果 = reduce(映射函数,序列)
要注意,从Python 2.6之后,reduce函数就从内置函数退变成了模块functools中的函数,想要使用reduce函数就必须要引用模块。
例:使用reduce函数的实例。 from functools import reduce def func(x, y): return x + y sum = reduce(func, [1, 2, 3, 4, 5]) print(sum) 运行结果: 15
reduce函数的映射函数必须要有两个参数,在上述实例中,func()就是映射函数,用来计算两个数之和。调用reduce(func, [1, 2, 3, 4, 5])的时候,reduce函数将会做下述运算:
先计算第一个和第二个参数:f(1,2),结果为3;
再把结果和第三个参数计算:f(3, 3),结果为6;
再把结果和第四个参数计算:f(6, 4),结果为10;
再把结果和第五个参数计算:f(10, 5),结果为15;
因为没有更多的参数了,结束计算,返回结果15。
5、 filter
filter函数也和reduce函数类似,都需要接收两个参数,一个映射函数,一个序列。并且filter函数和map函数的工作原理相似,都是对序列中的每一个元素都调用映射函数,且可以存在着多个序列,但序列的个数取决于映射函数的参数个数。不同的是,map函数参数中的映射函数返回的是一个确定的值,而filter函数参数中的映射函数返回布尔值True或False。格式如下:
filter(映射函数,序列)
例:使用filter函数的实例。 def is_odd(x): return x % 2 == 1 result = filter(is_odd, [1, 2, 3, 4, 5, 6]) for n in result: print(n) 运行结果: 1 3 5
在上例中,映射函数是is_odd()函数,如果参数x是奇数,则返回True,否则返回False。由于is_odd()函数只有一个参数x,所以filter()函数中只能有一个序列参数。调用filter()函数的时候,将序列中的所有元素都调用is_odd()函数,筛选出序列中的所有奇数,计算结果以数组形式返回,然后通过for循环,打印出数组里的所有元素。