1.functools.partial(func*args**keywords)

实现

def partial(func, *args, **keywords):def newfunc(*fargs, **fkeywords):newkeywords = keywords.copy()newkeywords.update(fkeywords)return func(*args, *fargs, **newkeywords)newfunc.func = funcnewfunc.args = argsnewfunc.keywords = keywordsreturn newfunc

例子

>>> from functools import partial
>>> basetwo = partial(int, base=2)
>>> basetwo.__doc__ = 'Convert base 2 string to an int.'
>>> basetwo('10010')
18

2.functools.update_wrapper(wrapperwrappedassigned=WRAPPER_ASSIGNMENTSupdated=WRAPPER_UPDATES)

将wrapper function更新为wrapped function,多用于decorator,以decorator module中提到的一个例子(用于实现缓存)

def memoize_uw(func):func.cache = {}def memoize(*args, **kw):if kw:  # frozenset is used to ensure hashabilitykey = args, frozenset(kw.items())else:key = argsif key not in func.cache:func.cache[key] = func(*args, **kw)return func.cache[key]return functools.update_wrapper(memoize, func)

这里memoize就是wrapper function,func就是wrapped function。最简单情况下调用memoize_uw应该返回一个memoize的实例,然后调用memoize返回func,这样我们得到的是memoize的实例。但是,我们希望得到的是被包装函数,也就是func的实例,实际上memoize和func的差别很小,我们可以通过一个函数实现。函数wrapper function中默认参数assigned“指派”的内容包括__module__, __name__, __qualname__, __annotations__, __doc__,使用默认参数update“更新”的是__dict__,指派的意思是覆盖,更新的意思是添加了func.attrF,也就是说memoize方法内声明的属性(memoize.attrM)会被保留,但是访问方法会更名为func.attrM。

在以下的示例中,使用update_wrapper和直接返回memoize的区别就是访问f1.__doc__得到的是"Simulate some long computation"还是None

@memoize_uw
def f1(x):"Simulate some long computation"time.sleep(1)return x

3.@functools.wraps(wrappedassigned=WRAPPER_ASSIGNMENTSupdated=WRAPPER_UPDATES)

wraps是update_wrapper的语法糖,从parameter来看就知道少了一个wrapper,于是乎就可以写成

def memoize_uw(func):func.cache = {}@wraps(func)def memoize(*args, **kw):if kw:  # frozenset is used to ensure hashabilitykey = args, frozenset(kw.items())else:key = argsif key not in func.cache:func.cache[key] = func(*args, **kw)return func.cache[key]return memoize

转载于:https://www.cnblogs.com/autoria/p/6846624.html

Python functool module相关推荐

  1. ubuntu下,py2,py3共存,/usr/bin/python: No module named virtualenvwrapper错误解决方法

    2019独角兽企业重金招聘Python工程师标准>>> ubuntu下,py2,py3共存 运行virtualenvwrapper会报错如下: /usr/bin/python: No ...

  2. python 模块(Module)和包

    阿里云大学人工智能学前小测验-Python测验 19.以下关于模块说法正确的是 A. 一个.py就是一个模块 B. 任何一个普通的xx.py文件可以作为模块导入 C. 模块文件的扩展名一定是 .py ...

  3. PyMOTW-3 (Python 3 Module of the Week) 翻译团队召集

    自翻译起始已经一个月过去了,目前翻译进度三分之一,PyMOTW 篇幅很大,翻译 PyMOTW 是一个偏大的工程,大概 140 篇文章,并且每篇文章里内容详实,例如这篇正则表达式的文章: https:/ ...

  4. VScode Python no module的解决方法

    VScode Python no module的解决方法 参考文章: (1)VScode Python no module的解决方法 (2)https://www.cnblogs.com/andy-0 ...

  5. python no module named pip_解决python No module named pip的问题

    解决python "No module named pip"的问题 python 升级后导致不能使用原来的pip命令 windows平台 cmd中敲命令:python -m ens ...

  6. python shutil module

    关注微信公众号(瓠悠笑软件部落),一起学习,一起摸鱼 python shutil module shutil module 是 shell utilities 的简写,在Python 程序里面能够让你 ...

  7. /usr/bin/python: No module named pip

    在安装 pip 工具时报错如下: /usr/bin/python: No module named pip 查找资料说先安装 ensurepip 模块,就可以恢复 pip: python -m ens ...

  8. Python模块(Module)详解

    文章目录 一.模块概念 二.模块导入与使用 2.0 准备工作 2.1 import 2.1.1 导入 2.1.2 使用 2.2 from...import 2.2.1 导入 2.2.2 使用 2.3 ...

  9. python func_Python functool module

    1.functools.partial(func,*args,**keywords) 实现 def partial(func, *args, **keywords):def newfunc(*farg ...

最新文章

  1. java --String类解决面试问题
  2. 双通输入法源码公布 by 尉迟方
  3. 必须熟悉的vim快捷键操作
  4. python---tornado钩子预留解析
  5. 针孔相机拍摄的图像坐标和空间点的对应关系
  6. 框架和库的区别_框架和库之间的区别
  7. Node中使用token(基于第三方包jsonwebtoken)
  8. mysql如何下载msi_2、Windows下MySQL数据库下载与安装详细教程 MSI方式
  9. Docker容器中的Linux机器快速设置国内源
  10. Web加固linux,Linux系统下web服务器的加固
  11. 7z替换exe文件内容不能替换文件_windows/system32文件夹权限问题
  12. 网络安全系列-XI: 主流网络协议介绍
  13. java c 日语一级,2017年职称日语C级考试语法知识强化题
  14. 混合游戏环境:让人类一直身处在物联网中(作业 全靠google)
  15. 挑战年薪50万不是梦,你要的高级架构师课程来袭!
  16. 【.net函数式编程】可重复的执行repeatable execution
  17. 多个tab页如何共享websocket
  18. 是的,你的AI技能正在“贬值”
  19. prometheus+grafana告警,监控部署展示
  20. Day 7/100:Python列表

热门文章

  1. Anchor-free新思路,统一目标检测、实例分割、姿态估计三种任务
  2. 一文梳理水下目标检测方法
  3. ICLR 2020 | Bengio 一作论文:因果机制、元学习与模型泛化如何产生关联?
  4. 经验 | 上交机械本硕转计算机视觉岗位面经
  5. .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  6. python展示全部好友_python爬所有好友头像
  7. Nvidia GPU驱动与CUDA、Ubuntu内核兼容性问题的解决日志
  8. 山东2021高考成绩查询时间二本,山东二本录取结果什么时候出来,2021年高考山东二本录取结果查询时间...
  9. mvp关联activity生命周期_Android MVP架构从入门到精通-真枪实弹
  10. 服务器好玩的项目_GitHub 上有什么好玩的项目?(附地址)