Python自带的 functools 模块提供了一些常用的高阶函数,也就是用于处理其它函数的特殊函数。换言之,就是能使用该模块对可调用对象进行处理。

functools模块函数概览

functools.cmp_to_key(func)

functools.total_ordering(cls)

functools.reduce(function, iterable[, initializer])

functools.partial(func[, args][, *keywords])

functools.update_wrapper(wrapper, wrapped[, assigned][, updated])

functools.wraps(wrapped[, assigned][, updated])

functools.cmp_to_key()

语法:

functools.cmp_to_key(func)

该函数用于将旧式的比较函数转换为关键字函数。

旧式的比较函数:接收两个参数,返回比较的结果。返回值小于零则前者小于后者,返回值大于零则相反,返回值等于零则两者相等。

关键字函数:接收一个参数,返回其对应的可比较对象。例如 sorted(), min(), max(), heapq.nlargest(), heapq.nsmallest(), itertools.groupby() 都可作为关键字函数。

在 Python 3 中,有很多地方都不再支持旧式的比较函数,此时可以使用 cmp_to_key() 进行转换。

示例:

functools.total_ordering()

语法:

functools.total_ordering(cls)

这是一个类装饰器,用于自动实现类的比较运算。

我们只需要在类中实现 __eq__() 方法和以下方法中的任意一个 __lt__(), __le__(), __gt__(), __ge__(),那么 total_ordering() 就能自动帮我们实现余下的几种比较运算。

示例:

functools.reduce()

语法:

functools.reduce(function, iterable[, initializer])

该函数与 Python 内置的 reduce() 函数相同,主要用于编写兼容 Python 3 的代码。

functools.partial()

语法:

functools.partial(func[, *args][, **keywords])

该函数返回一个 partial 对象,调用该对象的效果相当于调用 func 函数,并传入位置参数 args 和关键字参数 keywords 。如果调用该对象时传入了位置参数,则这些参数会被添加到 args 中。如果传入了关键字参数,则会被添加到 keywords 中。

partial() 函数的等价实现大致如下:

partial() 函数主要用于“冻结”某个函数的部分参数,返回一个参数更少、使用更简单的函数对象。

示例:

functools.update_wrapper()

语法:

functools.update_wrapper(wrapper, wrapped[, assigned][, updated])

该函数用于更新包装函数(wrapper),使它看起来像原函数一样。可选的参数是一个元组,assigned 元组指定要直接使用原函数的值进行替换的属性,updated 元组指定要对照原函数进行更新的属性。这两个参数的默认值分别是模块级别的常量:WRAPPER_ASSIGNMENTS 和 WRAPPER_UPDATES。前者指定了对包装函数的 __name__, __module__, __doc__ 属性进行直接赋值,而后者指定了对包装函数的 __dict__ 属性进行更新。

该函数主要用于装饰器函数的定义中,置于包装函数之前。如果没有对包装函数进行更新,那么被装饰后的函数所具有的元信息就会变为包装函数的元信息,而不是原函数的元信息。

functools.wraps()

语法:

functools.wraps(wrapped[, assigned][, updated])

wraps() 简化了 update_wrapper() 函数的调用。它等价于 partial(update_wrapper, wrapped=wrapped, assigned, updated=updated)。

示例:

如果不使用这个函数,示例中的函数名就会变成 wrapper ,并且原函数 example() 的说明文档(docstring)就会丢失。

原文链接:http://www.codebelief.com/article/2017/03/python-standard-library-functools-module/

python中functools的partiaethod_Python中functools模块函数解析相关推荐

  1. Python中functools模块函数解析

    Python自带的 functools 模块提供了一些常用的高阶函数,也就是用于处理其它函数的特殊函数.换言之,就是能使用该模块对可调用对象进行处理. functools模块函数概览 functool ...

  2. python学习笔记3-解析配置文件ConfigParser模块

    配置文件内容: [db] db_host=127.0.0.1 db_port=3306 db_user=root db_pass=password [concurrent] thread=10 pro ...

  3. python通过什么连接数据库_python中常用的各种数据库操作模块和连接实例

    这篇文章主要介绍了python中常用的各种数据库操作模块和连接实例,包括sqlite3.oracle.mysql.excel,需要的朋友可以参考下 工作中,经常会有用python访问各种数据库的需求, ...

  4. 明明安装了模块,还是出现 错误 ImportError: No module named ‘pandas‘ 原因LINUX上安装了多个python环境,将脚本中python 改为python3问题解

    明明安装了模块,还是出现 错误 ImportError: No module named 'pandas'  原因LINUX上安装了多个python环境,将脚本中python 改为python3问题解 ...

  5. python中options类_python中的optionParser模块

    Python 有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse,它功能强大 ...

  6. Python中import导入上一级目录模块及循环import问题的解决

    Python中import导入上一级目录模块及循环import问题的解决 参考文章: (1)Python中import导入上一级目录模块及循环import问题的解决 (2)https://www.cn ...

  7. python中time模块中的倒计时_Python中time模块与datetime模块在使用中的不同之处 python 的time模块获取的是什么时间...

    python的datetime模块的一些问题 time_1 = datetime.datetime.now(pytz.timezone('Asia/Shanghai')) timeimport dat ...

  8. python modbus类封装_Python 中引入一个文件,模块的概念

    Python 提供了强大的模块支持,主要体现在,不仅 Python 标准库中包含了大量的模块(称为标准模块),还有大量的第三方模块,开发者自己也可以开发自定义模块. 通过这些强大的模块可以极大地提高开 ...

  9. mac如何导入python第三方库_Mac系统中python idle导入第三方模块成功,ecplise导入python第三方模块失败解决方法...

    遇到一个比较纠结了4个月的问题,一直没有在意,今天实在忍受不了,尝试各种解决办法,终于把这个烦人的问题完美解决,不敢独享,写出来和各位大神共享. 问题:在mac OSx操作系统下,安装了python第 ...

最新文章

  1. sql 拆分_技术分享 | 基于分布式中间件的SQL改造指南
  2. 浅析如何从吸引蜘蛛爬取的角度进行网站内容优化建设
  3. python pickle模块
  4. 数据流技术在GPU和大数据处理中的应用
  5. pythonlambda回调函数_Python中如何借助lambda来给回调函数传参
  6. 低姿态生活,高境界做人
  7. 关于计算机实验的英语作文,关于实验的英语作文
  8. 【codeforces 709C】Letters Cyclic Shift
  9. 解决:“/****/kafka_2.13-3.0.0/bin/kafka-run-class.sh: line 342: exec: java: not found ”问题
  10. 诺基亚N8手机的导航功能
  11. 《数字图像处理 第三版》(冈萨雷斯)——第十二章 目标识别
  12. 极化码理论及算法研究后续(代码讲解)
  13. 好好编程-物流项目02【tomcat插件启动web项目】
  14. 手机如何安装java软件_如何在手机上安装JAVA平台
  15. Syong :静态代理模式
  16. ROSDUCT:通过rosbridge在本地公开远程ROS主题、服务和参数
  17. 关于插画师,大家不知道的“秘密”
  18. 锐龙r7 6800u和酷睿i7 11800h差距 r76800u和i711800h对比
  19. 《把时间当作朋友》读后感
  20. 在html页面实时显示系统时间

热门文章

  1. 在宝塔一键部署java项目时遇到的一些问题
  2. IE和Outlook Express的翻译插件设计
  3. 1006 - 打印星号三角形
  4. Appium+python自动化3-启动淘宝app(转)
  5. HTML学习(二):HTML基础
  6. 计算机内存不足黑屏怎么办,win10内存不足会黑屏吗_win10电脑内存不足黑屏了怎么办...
  7. 【二分答案】买礼物的艰辛
  8. [转] iOS --- 自释放在iOS开发中的应用
  9. 走近秦岭深山小镇--四亩地镇
  10. 利益相关者在敏捷项目管理中有什么用?