为了账号安全,请及时绑定邮箱和手机立即绑定

【Python入门】7.高阶函数之 map( )、reduce( )、filter( )、sorted( )的用法

标签:
Python

目录

高阶函数
map( )函数
reduce( )函数
•【练习】字符串转为整数的函数实现
filter( )函数
•【应用】产生素数的函数实现
sorted( )函数
补充笔记

高阶函数

Higher-order function,即高阶函数。
事实上,变量是可以指向函数的。

>>>abs(-2)2>>>f = abs                        #f变量指向函数abs()>>>f(-2)2

而函数名也是变量。

>>>abs = 1>>>abs(-1)                        #TypeError: 'int' object is not callable,此时abs不再是函数,而是整数1

注:由于abs函数实际上是定义在import builtins模块中的,所以要让修改abs变量的指向在其它模块也生效,要用import builtins; builtins.abs = 10。

既然变量可以指向函数,那么函数也可以传入函数和返回函数,这种函数就叫高阶函数。

map( )函数

map( )是一种高阶函数,它接收两个参数,第一个是函数,第二个是Iterable,即可迭代对象。map( )将函数依次作用于Iterable的每个元素,并将结果以Iterator,迭代器的形式返回。这种方式类似构造出了数学中的映射过程。由于Iterator是惰性序列,可以用list( ) 将其转化为list输出。

>>>list(map(str,[1,2,3,4,5,6]))                  #str()可以将整数转化为字符串['1', '2', '3', '4', '5', '6']

我们还能用列表生成器得到同样的结果,但要用到for语句:

>>>b = [str(x) for x in [1,2,3,4,5,6]]
['1', '2', '3', '4', '5', '6']

reduce( )函数

reduce( )函数同样接收一个函数和一个Iterable两个参数,不同的是所传入的函数必须要接收两个参数,而reduce是把函数作用的结果继续与序列中下一个元素做累计计算。

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

这个有什么用呢,举个简单的例子,可以把序列转化为相应的整数显示。

>>>from functools import reduce                  #加入内置函数reduce>>>def fn(x, y):
...   return(x * 10 + y)
...>>>reduce(fn, [1, 2, 3, 4, 5])12345
【练习】字符串转为整数的函数实现
from functools import reduce
d={'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}def str2int(s):
    def char2num(s):                          #将字符串的每个字符转化为对应的整数,并组成序列
        return d[s]    def fn(x, y):                             #将一个序列转化为对应的整数
        return x * 10 + y  

    return reduce(fn,map(char2num,s))

输出结果如下

>>>str2int('0110234')110234

filter( )函数

filter,即过滤的意思,filter( )函数的作用是过滤序列。与上面两个函数一样,接收一个函数与一个序列,而在函数作用于序列的元素之后,根据返回值True或False来保留或移除该元素。如写一个保留奇数的函数:

>>>def odd(n):
...    return n % 2 == 1...>>>list(filter(odd,[1, 2, 3, 4, 5, 6, 7, 8]))
[1, 3, 5, 7]

需要注意的是,filter( )函数返回的也是Iterator,惰性序列,需要用list( )来转化才能直接显示计算结果。

【应用】产生素数的函数实现

(以下代码转自廖雪芳的官方网站)

def _odd_iter():                             #定义一个初始值为3,且不存在偶数的初始序列生成器
    n = 1
    while True:
        n = n + 2
        yield ndef _not_divesible(n):                       #定义筛选函数,不是n的倍数则返回True
    return lambda x : x % n > 0def primes():                                #定义一个初始值为2,
    yield 2
    it = _odd_iter()                         #it为序列n的生成器,初始序列
    while True:
        n = next(it)                         #返回序列n的第一个值
        yield n
        it = filter(_not_divesible(n), it)   #过滤序列中为n的倍数的值for n in primes():                           #for循环取值
    if n < 100:                              #打印100以为的素数
        print(n)    else:        break

sorted( )函数

sort,分类、排序的意思。在Python总sorted( )函数可以将list排序。

>>>sorted([5, 9, -55, 90, 1])
[-55, 1, 5, 9, 90]

sort( )函数还能接收一个key函数来自定义排序,也就是先把传入的函数作用于list,根据结果进行排序,把传入的初始序列按照结果的顺序进行排序。如接收一个abs( )函数

>>>sorted([5, 9, -55, 90, 1], key = abs) 
[1, 5, 9, -55, 90]

还能加入第三个参数reverse=True,进行反向排序

>>>sorted([5, 9, -55, 90, 1], key = abs, reverse = True) 
[90, -55, 9, 5, 1]

补充笔记

补充几个函数的用法,s.index('x')返回字符串中字符'x'的索引值;s.strip( )函数去除字符串首尾的空格或其他指定字符;s[::-1]把字符串s从尾到头顺序重新排列。



作者:三贝_
链接:https://www.jianshu.com/p/09d4284f33e1


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消