python3 lambda函数_Python3中高阶函数lambda,filter,map,reduce,zip的详细用法

在Python里有五大高阶函数,他们分别是lambda()匿名函数,filter()筛选函数,map()函数,reduce()函数,zip()函数。下面就让我们来详细的了解一下这五种函数的具体用法吧。

1.lambda()匿名函数

匿名函数lambda:是指一类无需定义标识符(函数名)的函数或子程序。

lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。

要点:

1,lambda 函数不能包含命令,

2,包含的表达式不能超过一个。

说明:一定非要使用lambda函数;任何能够使用它们的地方,都可以定义一个单独的普通函数来进行替换。

我将它们用在需要封装特殊的、非重用代码上,避免令我的代码充斥着大量单行函数。

lambda匿名函数的格式:冒号前是参数,可以有多个,用逗号隔开,冒号右边的为表达式。

其实lambda返回值是一个函数的地址,也就是函数对象。

'''匿名函数lambda:是指一类无需定义标识符(函数名)的函数或子程序。

lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。

要点:

1,lambda 函数不能包含命令,

2,包含的表达式不能超过一个。

说明:一定非要使用lambda函数;任何能够使用它们的地方,都可以定义一个单独的普通函数来进行替换。

我将它们用在需要封装特殊的、非重用代码上,避免令我的代码充斥着大量单行函数。

lambda匿名函数的格式:冒号前是参数,可以有多个,用逗号隔开,冒号右边的为表达式。

其实lambda返回值是一个函数的地址,也就是函数对象。'''

defsum(x,y):return x+yprint(sum(4,6))

f=lambda x,y:x+yprint(f(4,6))#这俩个例子的效果是一样的,都是返回x+y

a=lambda x:x*xprint(a(4)) #传入一个参数的lambda函数 返回x*x

b=lambda x,y,z:x+y*zprint(b(1,2,3)) #返回x+y*z 即1+2*3=7

#2.方法结合使用

from functools importreduce

foo=[2, 18, 9, 22, 17, 24, 8, 12, 27]print(list(filter(lambda x:x%3==0,foo))) #筛选x%3==0 的元素

print(list(map(lambda x:x*2+10,foo))) #遍历foo 每个元素乘2+10 再输出

print(reduce(lambda x,y:x+y,foo)) #返回每个元素相加的和

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

20190107163349109.PNGwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

2.filter函数()

filter() 函数是一个对于可迭代对象的过滤器,过滤掉不符合条件的元素,

返回的是一个迭代器,如果要转换为列表,可以使用 list() 来转换。

该函数接收两个参数,第一个为函数的引用或者None,第二个为可迭代对象,

可迭代对象中的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到迭代器中

下面看下fiter()的用法:

'''filter() 函数是一个对于可迭代对象的过滤器,过滤掉不符合条件的元素,

返回的是一个迭代器,如果要转换为列表,可以使用 list() 来转换。

该函数接收两个参数,第一个为函数的引用或者None,第二个为可迭代对象,

可迭代对象中的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到迭代器中

下面看下fiter()的用法:'''my_list=[1,2,'',3,4,'6',' ']

new_list=list(filter(None,my_list))print(new_list)#None 函数 过滤掉'' 而不是过滤掉空字符串

defis_oushu(x):return x%2==0

new_list=list(filter(is_oushu,list(range(1,11))))print(new_list)#过滤掉不是偶数的数

a=[1,2,3,4,5,6,2,2,2,]print(list(filter(lambda x:x!=2,a)))#筛选出列表里所有的不是 2 的元素

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

20190107163545138.PNGwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

3.map函数详解

map()函数

map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,

并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。

例如,对于list [1, 2, 3, 4, 5, 6, 7, 8, 9]

如果希望把list的每个元素都作平方,就可以用map()函数:

因此,我们只需要传入函数f(x)=x*x,就可以利用map()函数完成这个计算:

'''map()函数

map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,

并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。

例如,对于list [1, 2, 3, 4, 5, 6, 7, 8, 9]

如果希望把list的每个元素都作平方,就可以用map()函数:

因此,我们只需要传入函数f(x)=x*x,就可以利用map()函数完成这个计算:'''list=[1,2,3,4,5,6,7,8,9]deff(x):return x*x

list1=map(f,list)print(list1)for i inlist1:print(i)'''注意:map()函数不改变原有的 list,而是返回一个新的 list。

利用map()函数,可以把一个 list 转换为另一个 list,只需要传入转换函数。

由于list包含的元素可以是任何类型,因此,map() 不仅仅可以处理只包含数值的 list,

事实上它可以处理包含任意类型的 list,只要传入的函数f可以处理这种数据类型。

任务

假设用户输入的英文名字不规范,没有按照首字母大写,后续字母小写的规则,

请利用map()函数,把一个list(包含若干不规范的英文名字)变成一个包含规范英文名字的'''

defformat_name(s):

s1=s[0:1].upper()+s[1:].lower()returns1

names=['adam', 'LISA', 'barT']print (map(format_name, names)) #python2 这样写可以直接输出列表

for i inmap(format_name,names):print(i) #python3 得这样写才可以

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x0ZjIwMTgzNA==,size_16,color_FFFFFF,t_70wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

4.reduce函数详解

在python3中如果使用reduce需要先导入

from functools import reduce

reduce函数,reduce函数会对参数序列中元素进行累积。

reduce函数的定义:

reduce(function, sequence [, initial] ) -> value

function参数是一个有两个参数的函数,reduce依次从sequence中取一个元素,

和上一次调用function的结果做参数再次调用function。

第一次调用function时,如果提供initial参数,

会以sequence中的第一个元素和initial作为参数调用function,

否则会以序列sequence中的前两个元素做参数调用function。

'''在python3中如果使用reduce需要先导入

from functools import reduce

reduce函数,reduce函数会对参数序列中元素进行累积。

reduce函数的定义:

reduce(function, sequence [, initial] ) -> value

function参数是一个有两个参数的函数,reduce依次从sequence中取一个元素,

和上一次调用function的结果做参数再次调用function。

第一次调用function时,如果提供initial参数,

会以sequence中的第一个元素和initial作为参数调用function,

否则会以序列sequence中的前两个元素做参数调用function。'''

from functools importreduce

lst=[1,2,3,4,5,6]deff(x,y):return x+yprint(reduce(f,lst))'''过程1+2+3+4+5+6=21'''

print(reduce(lambda x,y:x*y,lst))#运行过程为1*2*3*4*5*6=720

#来个稍微复杂的

print(reduce(lambda x,y:x*y+1,lst))'''运算步骤:1*2+1=3

3*3+1=10

10*4+1=41

41*5+1=206

206*6+1=1237'''

#再说说有初始化值的情况, 这个时候就不是取列表的前两项, 而是取初始值为第一个,#序列的第一个元素为第二个元素,开始进行lambda函数的应用计算.

print(reduce(lambda x,y:x+y,lst,5))'''计算步骤:5+1=6

6+2=8

8+3=11

11+4=15

15+5=20

20+6=26'''

20190107163928260.PNGwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

5.zip函数详解

#zip函数接受任意多个可迭代对象作为参数,将对象中对应的元素打包成一个tuple,然后返回一个可迭代的zip对象.

#这个可迭代对象可以使用循环的方式列出其元素

#若多个可迭代对象的长度不一致,则所返回的列表与长度最短的可迭代对象相同.

#zip函数接受任意多个可迭代对象作为参数,将对象中对应的元素打包成一个tuple,然后返回一个可迭代的zip对象.#这个可迭代对象可以使用循环的方式列出其元素#若多个可迭代对象的长度不一致,则所返回的列表与长度最短的可迭代对象相同.

#1.用列表生成zip对象

x=[1,2,3]

y=[4,5,6]

z=[7,8,9]

h=['a','b','c','d']

zip1=zip(x,y,z)print(zip1)for i inzip1:print(i)

zip2=zip(x,y,h)for i inzip2:print(i)

zip3=zip(h)for i inzip3:print(i)

zip4=zip(*h*3)for i inzip4:print(i) #这是干啥哟。。

print('==*=='*10)#2.二维矩阵变换

l1=[[1,2,3],[4,5,6],[7,8,9]]print(l1)print([[j[i] for j in l1] for i inrange(len(l1[0])) ])

zip5=zip(*l1)for i inzip5:print(i)

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

1471003-20190107164956231-1923559883.png

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

以上就是五大高阶函数的具体用法。。。希望大家可以学到一些东西。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值