python operator模块

在函数式编程中,经常需要把算术运算符当作函数使用。例如,不使用递归计算阶乘。求和可以使用 sum 函数,但是求积则没有这样的函数。我们可以使用 reduce 函数,但是需要一个函数计算序列中两个元素之积。下面展示如何使用lambda 表达式解决这个问题。

from functools import reduce
def fact(n):
    return reduce(lambda a, b: a*b, range(1, n+1))

operator 模块为多个算术运算符提供了对应的函数,从而避免编写 lambda a, b: a*b这种平凡的匿名函数.

from functools import reduce
from operator import mul
def fact(n):
    return reduce(mul, range(1, n+1))

itemgetter 的常见用途:根据元组的某个字段给元组列表排序。在这个示例中,按照国家代码(第 2 个字段)的顺序打印各个城市的信息。其实,itemgetter(1) 的作用与 lambda fields: fields[1] 一样:创建一个接受集合的函数,返回索引位 1 上的元素:

from operator import itemgetter
metro_data = [('zhanglinpeng', 'hengda', 'houwei'),('huangbowen','hengda','zhongchang'),('wulei','shanggang','qianfeng'),('zhangxizhe','guoan','zhongchang')]
for jlb in sorted(metro_data, key=itemgetter(1)):
    print city

# 输出结果:
('zhangxizhe', 'guoan', 'zhongchang')
('zhanglinpeng', 'hengda', 'houwei')
('huangbowen', 'hengda', 'zhongchang')
('wulei', 'shanggang', 'qianfeng')

如果把多个参数传给 itemgetter,它构建的函数会返回提取的值构成的元组:


python operator模块_第1张图片
image.png

attrgetter 与 itemgetter 作用类似,它创建的函数根据名称提取对象的属性。


image.png

最后介绍:

from operator import methodcaller
s = 'The time has come'
upcase = methodcaller('upper')
upcase(s)  # 'THE TIME HAS COME'
hiphenate = methodcaller('replace', '  ', '-')
hiphenate(s) # 'The-time-has-come'

你可能感兴趣的:(python operator模块)