函数(4):匿名函数、高阶函数

 

 

 

一、匿名函数lambda

Python中定义函数有两中方法,一种式用常规方式def定义,函数要指定名字。第二种式用lambda关键字定义,不需要指定名字,不需要指定名字,称为lambda函数。


Lambda函数又称匿名函数,有些时候只需要临时一用,而且业务逻辑简单,就可以使用Lambda匿名函数,没有必要非给取个名字。
先来看个简单的lambda函数:

        lambda x, y : x+y

 

冒号左侧表示函数接收的参数,冒号右侧表示函数的返回值。可以给函数绑定一个名字,然后使用:

 

例1:

 

结果:

不过这样匿名就没意义了。一般不这么用。

 

一般与一些高阶函数配合使用。一个函数可以接收另一个函数作为参数,这种函数称之为高阶函数。

常见的高级函数有:sorted, filter, map, reduce等。

 

二、常用高阶函数

2.1 sorted()

sorted(iterable, key=None, reverse=False)

 

1.内置函数sorted(),与list中的成员函数list.sort()用法是一样的,连参数都基本上是一样的。主要的区别在于,list.sort()是对已经存在的列表进行操作,进而可以改变进行操作的列表。而内建函数sorted返回的是一个新的list,而不是在原来的基础上进行的操作。【例1】【例2】【例3】

 

2. key参数可以传入一个函数,该参数作为sorted的排序依据。即对iterable中的item依次执行key(item),将结果作为排序依据。【例4】【例5】

 

 

例1:

 

结果:

 

例2:

 

结果:

 

例3:

 

结果:

 

例4:

 

结果:

 

等价于:

 

 

例5:

 

结果:

 

 

2.2 max()

max(iterable, *[, default=obj, key=func]) -> value          

max(arg1, arg2, *args, *[, key=func]) -> value

 

1. 参数可以为一个容器(字符串、列表、元组、字典、集合)【例1】, 也可以直接传入多个元素。【例2】

2. key参数可以传入一个函数,该参数作为sorted的排序依据。即对每一个元素item依次执行key(item),将结果作为排序依据。【例3】【例4】

 

 

例1:

结果:

 

例2:

结果:

 

例3:

结果:

也就是求最小值。

 

例4:

 

结果:

求和的最大值。

 

2.3 min()

同max()

 

 

2.4 filter()

filter(func,seq)函数用于过滤序列。func()是一个布尔函数。对seq中的item依次执行func(item),将执行结果为True的item组成一个filter对象。

 

例1:求1-20之间的偶数

 

结果:

 

等价于:

结果:

 

 

 

 

2.5 map()

map(func,seq)函数接收两个参数,一个是函数,一个是Iterable(可迭代对象,序列)map将传入的函数func()依次作用到序列seq的每个元素,并把结果作为新的Iterator(迭代器)返回,之后可转为lis或其他类型输出。

 

1. 可迭代对象:字符串、列表、元组、集合。range(5)也是,因为生成的也是可迭代对象。【例1】

2. map()函数提供了两个参数,即map(function,sequence1,sequence2)。。【例2】

 

 

例1:

 

结果:

 

等价于: map(lambda x:x**2, range(5))

结果:

 

 

例2:

结果:

 

等价于:map(lambda x,y : x+y, [10,10,10], [1,2,3])

结果:

 

 

例3:求一个序列的元素的绝对值

结果:

 

 

2.6 reduce()

reduce(func,seq [,initial])  function函数必须接收2个参数。先把sequence中第一个值和第二个值当参数传给function,再把function的返回值和第三个值当参数传给function....最后只返回一个结果。。。

即:

res1 = func(第一个值,第二个值)

res2 = func(res1, 第三个值)

res3 = func(res2, 第四个值)

....

 

1. 在Python2中,reduce是内置函数。但在Python3中,在functools模块中。

2. 最后一个参数可选,为初始值

 

例:

 

结果:

 

 

 

 

 

 

 

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值