python func_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=func
newfunc.args=args
newfunc.keywords=keywordsreturn newfunc
例子
>>> from functools importpartial>>> 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中提到的一个例子(用于实现缓存)
defmemoize_uw(func):
func.cache={}def memoize(*args, **kw):if kw: #frozenset is used to ensure hashability
key =args, frozenset(kw.items())else:
key=argsif key not infunc.cache:
func.cache[key]= func(*args, **kw)returnfunc.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_uwdeff1(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,于是乎就可以写成
defmemoize_uw(func):
func.cache={}
@wraps(func)def memoize(*args, **kw):if kw: #frozenset is used to ensure hashability
key =args, frozenset(kw.items())else:
key=argsif key not infunc.cache:
func.cache[key]= func(*args, **kw)returnfunc.cache[key]return memoize
python func_Python functool module相关推荐
- python中的module
Python中的Module是比较重要的概念.常见的情况是,事先写好一个.py文件,在另一个文件中需要import时,将事先写好的.py文件拷贝到当前目录,或者是在sys.path中增加事先写好的.p ...
- python ImportError: No module named unittest2
2019独角兽企业重金招聘Python工程师标准>>> python ImportError: No module named unittest2 下载地址:https://pypi ...
- python中模块(Module)和包(Package)的区别 (导入模块、导入包)(import导包)
如下结构,mycompany就是包,abc.py和xyz.py就是模块 mycompany ├─ __init__.py ├─ abc.py └─ xyz.py 参考文章:Python中模块(Modu ...
- Python:模块module
python中一个模块就是一个扩展名为.py的文件,也可能是预编译的.pyc文件. 引入模块用:import 模块名 使用引用模块中定义的标识符(函数.变量.类)用:模块名.标识符名 引入模块中的标识 ...
- Python ImportError: No module named Image
/********************************************************************************** Python ImportErr ...
- python ModuleNotFoundError: No module named ‘requests‘ 的 解决方案
python ModuleNotFoundError: No module named 'requests' 的 解决方案 参考文章: (1)python ModuleNotFoundError: N ...
- VSCode Python解决 No module named 问题
见:VSCode Python解决 No module named 问题_努力中的老周的专栏-CSDN博客
- 【Python】 -- from module import * 、from module import function 与 import module
import module 导入Python标准库或者第三方库,导入之后可以通过以下语法调用库中的函数.此方法会导入module中的所有函数方法,可能会占用较大的不必要的空间以及load时长增加. i ...
- python.exe: No module named pip以及pycharm下载插件失败等问题
只要把pip升级一下就行了 如果你在dos里输入 python -m pip install --upgrade pip 报python.exe: No module named pip这个错误 你可 ...
最新文章
- 全文翻译(四) TVM An Automated End-to-End Optimizing Compiler
- GridView总结二:GridView自带编辑删除更新
- 转载:sql2005 管道的另一端上无任何进程解决方法
- 网络编程学习笔记(广播)
- 中国计算机学会CCF推荐国际学术会议和期刊目录-交叉/综合/新兴
- gorm查询降序排列
- AVS3关键技术、性能和复杂度分析
- Aspose.Cells使用总结大全
- nodejs常用模块-url
- Java实现栈(顺序栈,链栈)
- SpringSecurity授权(访问控制)
- FreeSql (二)自动迁移实体
- CSS 中的定位:relative,absolute
- java c语言 for_Java能写C语言编译器吗
- TortoiseGitPlink提示输入密码解决方法
- Linux命令 lsof -i:端口号 ——有什么用途
- 如何删除档案中的重复的行
- LVDS 屏 format
- Beosin(成都链安)预警:黑客攻击EOS竞猜类游戏 已获利数百EOS
- javascript实现鼠标移动两个小人的动画效果
热门文章
- java \t怎么从头开始_通过这些简单的步骤从头开始学习Java
- 脚本语言和工程语言_语言工程中有趣的事情
- rest web服务_在WildFly的REST Web服务中与Jackson的双向关系
- java lambda::_基准测试:Java 8 Lambda和流如何使您的代码慢5倍
- 设置Elasticsearch N-Gram字分析器的过程
- 静态变量读取属性文件_一种通过变量插值读取属性的方法
- 突破极限–如何使用AeroGear Unified Push for Java EE和Node.js
- 告诉我们您想要什么,我们将做到:消费者驱动的合同测试消息传递
- activemq网络桥接_ActiveMQ –经纪人网络解释–第4部分
- Optional.isEmpty()在JDK 11 EA构建中可用