Python functool module
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
(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=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
(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=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相关推荐
- ubuntu下,py2,py3共存,/usr/bin/python: No module named virtualenvwrapper错误解决方法
2019独角兽企业重金招聘Python工程师标准>>> ubuntu下,py2,py3共存 运行virtualenvwrapper会报错如下: /usr/bin/python: No ...
- python 模块(Module)和包
阿里云大学人工智能学前小测验-Python测验 19.以下关于模块说法正确的是 A. 一个.py就是一个模块 B. 任何一个普通的xx.py文件可以作为模块导入 C. 模块文件的扩展名一定是 .py ...
- PyMOTW-3 (Python 3 Module of the Week) 翻译团队召集
自翻译起始已经一个月过去了,目前翻译进度三分之一,PyMOTW 篇幅很大,翻译 PyMOTW 是一个偏大的工程,大概 140 篇文章,并且每篇文章里内容详实,例如这篇正则表达式的文章: https:/ ...
- VScode Python no module的解决方法
VScode Python no module的解决方法 参考文章: (1)VScode Python no module的解决方法 (2)https://www.cnblogs.com/andy-0 ...
- python no module named pip_解决python No module named pip的问题
解决python "No module named pip"的问题 python 升级后导致不能使用原来的pip命令 windows平台 cmd中敲命令:python -m ens ...
- python shutil module
关注微信公众号(瓠悠笑软件部落),一起学习,一起摸鱼 python shutil module shutil module 是 shell utilities 的简写,在Python 程序里面能够让你 ...
- /usr/bin/python: No module named pip
在安装 pip 工具时报错如下: /usr/bin/python: No module named pip 查找资料说先安装 ensurepip 模块,就可以恢复 pip: python -m ens ...
- 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 ...
- python func_Python functool module
1.functools.partial(func,*args,**keywords) 实现 def partial(func, *args, **keywords):def newfunc(*farg ...
最新文章
- java --String类解决面试问题
- 双通输入法源码公布 by 尉迟方
- 必须熟悉的vim快捷键操作
- python---tornado钩子预留解析
- 针孔相机拍摄的图像坐标和空间点的对应关系
- 框架和库的区别_框架和库之间的区别
- Node中使用token(基于第三方包jsonwebtoken)
- mysql如何下载msi_2、Windows下MySQL数据库下载与安装详细教程 MSI方式
- Docker容器中的Linux机器快速设置国内源
- Web加固linux,Linux系统下web服务器的加固
- 7z替换exe文件内容不能替换文件_windows/system32文件夹权限问题
- 网络安全系列-XI: 主流网络协议介绍
- java c 日语一级,2017年职称日语C级考试语法知识强化题
- 混合游戏环境:让人类一直身处在物联网中(作业 全靠google)
- 挑战年薪50万不是梦,你要的高级架构师课程来袭!
- 【.net函数式编程】可重复的执行repeatable execution
- 多个tab页如何共享websocket
- 是的,你的AI技能正在“贬值”
- prometheus+grafana告警,监控部署展示
- Day 7/100:Python列表
热门文章
- Anchor-free新思路,统一目标检测、实例分割、姿态估计三种任务
- 一文梳理水下目标检测方法
- ICLR 2020 | Bengio 一作论文:因果机制、元学习与模型泛化如何产生关联?
- 经验 | 上交机械本硕转计算机视觉岗位面经
- .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
- python展示全部好友_python爬所有好友头像
- Nvidia GPU驱动与CUDA、Ubuntu内核兼容性问题的解决日志
- 山东2021高考成绩查询时间二本,山东二本录取结果什么时候出来,2021年高考山东二本录取结果查询时间...
- mvp关联activity生命周期_Android MVP架构从入门到精通-真枪实弹
- 服务器好玩的项目_GitHub 上有什么好玩的项目?(附地址)