文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python functools详解

2023-01-31 01:38

关注

Python functools其他都比较简单,挑partial和wraps扯扯淡

官网文档说的真是不好理解,就当作是把一个函数,绑定部分或者全部参数后生成一个新版本的函数.

还是很绕口,看例子

from functools import partial
>>> def add(a, b, kw="add"):
...     return a+b, kw
... 
>>> add
<function add at 0x2afeaf7cecf8>


>>> plus3 = partial(add, 3, kw="add_3")
>>> plus3.func
<function add at 0x2afeaf7cecf8>
>>> plus3.args
(3,)
>>> plus3.keywords
{'kw': 'add_3'}
>>> plus3(5)
(8, 'add_3')

plus3就是创建一个新函数(准确的说,是叫partial object,不用管,你就当函数,不影响使用):args使用你预置的3, kwargs也update你指定的关键字参数,被修改的args和kwargs最终都被应用到add函数上

文档说的比较详细,如果不使用这个wraps,那么原始函数的__name____doc__都会丢失

不使用wraps例子

>>> def my_decorator(f):
...     def wrap(*args, **kwargs):
...         print "decorated func called"
...         return f(*args, **kwargs)
...     return wrap
... 
>>> 
>>> @my_decorator
... def ff():
...     """ff doc str"""
...     print "ff called"
... 
>>> 
>>> ff

>>> ff.__doc__
>>> ff.__name__
'wrap'
>>> ff()
decorated func called
ff called

可以看到ff.__doc__丢失,ff.__name__被覆盖。下面是使用wraps例子

>>> from functools import wraps
>>> def my_decorator2(f):
...     @wraps(f)
...     def wrap(*args, **kwargs):
...         print "decorated func called"
...         return f(*args, **kwargs)
...     return wrap
... 
>>> @my_decorator2
... def gg():
...     """gg doc str"""
...     print "gg called"
... 
>>> gg.__doc__
'gg doc str'
>>> gg.__name__
'gg'
>>> gg()
decorated func called
gg called

gg.__doc__和gg.__name__被保留。所以呢,为了便于调试,尽量保留原始函数信息,日志里才能更清楚的输出各种信息

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯