python内置高阶函数 zip_python内置高阶函数-lambda、zip、map、reduce、filter

1、 lambda

在Python中,lambda函数的函数体有且仅有一条语句,即返回值的表达式语句,它比def简单许多。格式如下:

返回函数名 = lambda 参数列表:函数返回值表达式语句

参数列表是可以选择的,如果有多个参数,就用逗号将这些参数隔开。函数返回值的表达式语句不能含有循环、分支、return语句或yield语句,但是允许使用条件表达式。lambda函数的结果是一个匿名函数,当调用lambda函数时,返回的是表达式语句计算所得到的结果。

例:使用lambda函数计算两个数之和。

sum= lambda x, y: x +yprint(sum(1, 2))

2、 zip

zip函数可以接受一系列可迭代的对象作为参数,调用zip函数时,它按顺序将这一些相对应的元素都变为一个个元组,再返回这些元组所组成的列表。

例:使用zip函数的实例。

x= [1, 2]

y= [3, 4]

z= [5, 6]

result=zip(x, y, z)for n inresult:print(n)

运行结果:

(1, 3, 5)

(2, 4, 6)

将打包结果解压。

unzip= zip(*result)for n inunzip: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]defadd(x):return x + 1result=map(add, list)for n inresult: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];defadd(x, y):return x*100 +y*10;

result=map(add,list1,list2);for n inresult:print(n);

运行结果:140

250

360

4、 reduce

reduce函数就是将指定的序列中每个元素按一定的规则调用指定函数,最后返回最终结果。格式如下:

最终结果 = reduce(映射函数,序列)

要注意,从Python 2.6之后,reduce函数就从内置函数退变成了模块functools中的函数,想要使用reduce函数就必须要引用模块。

例:使用reduce函数的实例。from functools importreducedeffunc(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函数的实例。defis_odd(x):return x % 2 == 1result= filter(is_odd, [1, 2, 3, 4, 5, 6])for n inresult:print(n)

运行结果:1

3

5

在上例中,映射函数是is_odd()函数,如果参数x是奇数,则返回True,否则返回False。由于is_odd()函数只有一个参数x,所以filter()函数中只能有一个序列参数。调用filter()函数的时候,将序列中的所有元素都调用is_odd()函数,筛选出序列中的所有奇数,计算结果以数组形式返回,然后通过for循环,打印出数组里的所有元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值