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相关推荐

  1. python中的module

    Python中的Module是比较重要的概念.常见的情况是,事先写好一个.py文件,在另一个文件中需要import时,将事先写好的.py文件拷贝到当前目录,或者是在sys.path中增加事先写好的.p ...

  2. python ImportError: No module named unittest2

    2019独角兽企业重金招聘Python工程师标准>>> python ImportError: No module named unittest2 下载地址:https://pypi ...

  3. python中模块(Module)和包(Package)的区别 (导入模块、导入包)(import导包)

    如下结构,mycompany就是包,abc.py和xyz.py就是模块 mycompany ├─ __init__.py ├─ abc.py └─ xyz.py 参考文章:Python中模块(Modu ...

  4. Python:模块module

    python中一个模块就是一个扩展名为.py的文件,也可能是预编译的.pyc文件. 引入模块用:import 模块名 使用引用模块中定义的标识符(函数.变量.类)用:模块名.标识符名 引入模块中的标识 ...

  5. Python ImportError: No module named Image

    /********************************************************************************** Python ImportErr ...

  6. python ModuleNotFoundError: No module named ‘requests‘ 的 解决方案

    python ModuleNotFoundError: No module named 'requests' 的 解决方案 参考文章: (1)python ModuleNotFoundError: N ...

  7. VSCode Python解决 No module named 问题

    见:VSCode Python解决 No module named 问题_努力中的老周的专栏-CSDN博客

  8. 【Python】 -- from module import * 、from module import function 与 import module

    import module 导入Python标准库或者第三方库,导入之后可以通过以下语法调用库中的函数.此方法会导入module中的所有函数方法,可能会占用较大的不必要的空间以及load时长增加. i ...

  9. python.exe: No module named pip以及pycharm下载插件失败等问题

    只要把pip升级一下就行了 如果你在dos里输入 python -m pip install --upgrade pip 报python.exe: No module named pip这个错误 你可 ...

最新文章

  1. 全文翻译(四) TVM An Automated End-to-End Optimizing Compiler
  2. GridView总结二:GridView自带编辑删除更新
  3. 转载:sql2005 管道的另一端上无任何进程解决方法
  4. 网络编程学习笔记(广播)
  5. 中国计算机学会CCF推荐国际学术会议和期刊目录-交叉/综合/新兴
  6. gorm查询降序排列
  7. AVS3关键技术、性能和复杂度分析
  8. Aspose.Cells使用总结大全
  9. nodejs常用模块-url
  10. Java实现栈(顺序栈,链栈)
  11. SpringSecurity授权(访问控制)
  12. FreeSql (二)自动迁移实体
  13. CSS 中的定位:relative,absolute
  14. java c语言 for_Java能写C语言编译器吗
  15. TortoiseGitPlink提示输入密码解决方法
  16. Linux命令 lsof -i:端口号 ——有什么用途
  17. 如何删除档案中的重复的行
  18. LVDS 屏 format
  19. Beosin(成都链安)预警:黑客攻击EOS竞猜类游戏 已获利数百EOS
  20. javascript实现鼠标移动两个小人的动画效果

热门文章

  1. java \t怎么从头开始_通过这些简单的步骤从头开始学习Java
  2. 脚本语言和工程语言_语言工程中有趣的事情
  3. rest web服务_在WildFly的REST Web服务中与Jackson的双向关系
  4. java lambda::_基准测试:Java 8 Lambda和流如何使您的代码慢5倍
  5. 设置Elasticsearch N-Gram字分析器的过程
  6. 静态变量读取属性文件_一种通过变量插值读取属性的方法
  7. 突破极限–如何使用AeroGear Unified Push for Java EE和Node.js
  8. 告诉我们您想要什么,我们将做到:消费者驱动的合同测试消息传递
  9. activemq网络桥接_ActiveMQ –经纪人网络解释–第4部分
  10. Optional.isEmpty()在JDK 11 EA构建中可用