operator模块和functools模块

operator模块

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

  示例 5-21 使用 reduce 函数和一个匿名函数计算阶乘

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

operator 模块为多个算术运算符提供了对应的函数,从而避免编写 lambda a, b: a*b 这种平凡的匿名函数。使用算术运算符函数,可以 把示例 5-21 改写成示例 5-22 那样。

   示例 5-22 使用 reduce 和 operator.mul 函数计算阶乘

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

operator 模块中还有一类函数,能替代从序列中取出元素或读取对象 属性的 lambda 表达式:因此,itemgetter 和 attrgetter 其实会自行构建函数。

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

metro_data = [
    (‘Tokyo‘, ‘JP‘, 36.933, (35.689722, 139.691667)),
    (‘Delhi NCR‘, ‘IN‘, 21.935, (28.613889, 77.208889)),
    (‘Mexico City‘, ‘MX‘, 20.142, (19.433333, -99.133333)),
    (‘New York-Newark‘, ‘US‘, 20.104, (40.808611, -74.020386)),
    (‘Sao Paulo‘, ‘BR‘, 19.649, (-23.547778, -46.635833)),
 ]

from operator import itemgetter
for city in sorted(metro_data, key=itemgetter(1)):
    print(city)

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

原文地址:https://www.cnblogs.com/xiangxiaolin/p/11609324.html

时间: 2024-11-06 12:58:44

operator模块和functools模块的相关文章

python functools模块

functools.partial 作用: functools.partial 通过包装手法,允许我们 "重新定义" 函数签名 用一些默认参数包装一个可调用对象,返回结果是可调用对象,并且可以像原始对象一样对待 冻结部分函数位置函数或关键字参数,简化函数,更少更灵活的函数参数调用 #args/keywords 调用partial时参数 def partial(func, *args, **keywords): def newfunc(*fargs, **fkeywords): newk

Python面向切面编程-语法层面和functools模块

1,Python语法层面对面向切面编程的支持(方法名装饰后改变为log) __author__ = 'Administrator' import time def log(func): def wrapper(*args): start = time.time() func(args) end =time.time() print 'func used time is :', end - start return wrapper @log def reg(args): print 'welcom

Python标准库--functools模块

functools模块:管理函数的工具 partial对象:包装原函数,提供默认值 import functools # 原函数 def myfunc(a, b=2): """Docstring for myfunc().""" print(' called myfunc with:', a, b) return # 输出函数 def show_details(name, f, is_partial=False): print(name) pri

python 装饰器和 functools 模块

转自:http://blog.jkey.lu/2013/03/15/python-decorator-and-functools-module/ 什么是装饰器? 在 python 语言里第一次看到装饰器不免让人想到设计模式中的装饰模式——动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. 好吧,python 中的装饰器显然和装饰模式毫无关系.那 python 中的装饰器到底是什么呢? 简而言之,装饰器提供了一种方法,在函数和类定义语句的末尾插入自动运行代码.pyth

functools模块

functools模块用于高阶函数:作用于或返回其他函数的函数.一般来说,任何可调用的对象都可以作为这个模块的功能来处理. functools模块定义了以下功能: 1.functools.cmp_to_key(func): 将旧式的比较函数转换为关键函数.与接受关键功能的工具一起使用,例如sorted(), min(), max(), heapq.nlargest(), heapq.nsmallest(), itertools.groupby()).该函数主要用作将程序转换为Python 3的转

关于functools模块的wraps装饰器用途

测试环境:Python3.6.2 + win10 +  Pycharm2017.3 装饰器之functools模块的wraps的用途: 首先我们先写一个装饰器 # 探索functools模块wraps装饰器的用途 from functools import wraps def trace(func): """ 装饰器 """ # @wraps(func) def callf(*args, **kwargs): """

python中的functools模块

functools模块可以作用于所有的可以被调用的对象,包括函数 定义了__call__方法的类等 1 functools.cmp_to_key(func) 将比较函数(接受两个参数,通过比较两个参数的大小返回负值,0,或者正数)转换为key function(返回一个值用来比较或者排序的可调用对象), 例如: sorted(iterable, functools.cmp_to_key(locale.strcoll)) def cmp1(n1, n2): return n1 - n2 a = [

python 之 functools模块

functools模块用于高阶函数:作用于或返回其他函数的函数.一般而言,任何可调用对象都可以作为本模块用途的函数来处理. 官方文档已经有了详尽的介绍,这里就不在复述,详情请见:官方文档 .这里主要介绍下 partial. partial 详解 functools.partial返回的是一个可调用的partial对象,使用方法是partial(func,*args,**kw),func是必须要传入的,而且至少需要一个args或是kw参数. from functools import partia

Python 模块简介 -- functools

Python 的 functools 模块可以说主要是为函数式编程而设计,用于增强函数功能. functools.partial 用于创建一个偏函数,它用一些默认参数包装一个可调用对象,返回结果是可调用对象,并且可以像原始对象一样对待,这样可以简化函数调用.实际上 partial 相当于一个高阶函数,其大致的实现如下(实际在标准库中它是用 C 实现的): def partial(func, *args, **keywords): def newfunc(*fargs, **fkeywords):