Python functools详解
Python functools其他都比较简单,挑partial和wraps扯扯淡
1.functools.partial
官网文档说的真是不好理解,就当作是把一个函数,绑定部分或者全部参数后生成一个新版本的函数.
还是很绕口,看例子
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函数上
2.functools.wraps
文档说的比较详细,如果不使用这个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__
被保留。所以呢,为了便于调试,尽量保留原始函数信息,日志里才能更清楚的输出各种信息
Python functools详解相关推荐
- python区块链开发_Fabric区块链Python开发详解
Hyperledger Fabric是最流行的联盟区块链平台.Fabric区块链Python开发详解课程 涵盖Fabric区块链的核心概念.Fabric网络搭建.Node链码开发.Python应用开发 ...
- python装饰器setter_第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter...
上节详细介绍了利用@property装饰器定义属性的语法,本节通过具体案例来进一步说明. 一. 案例说明 本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其他方法都只 ...
- 【python】详解类class的继承、__init__初始化、super方法
原文链接; https://blog.csdn.net/brucewong0516/article/details/79121179?utm_medium=distribute.pc_relevant ...
- python与golang_Golang与python线程详解及简单实例
Golang与python线程详解及简单实例 在GO中,开启15个线程,每个线程把全局变量遍历增加100000次,因此预测结果是 15*100000=1500000. var sum int var ...
- python 最小二乘法_最小二乘法及其python实现详解
最小二乘法Least Square Method,做为分类回归算法的基础,有着悠久的历史(由马里·勒让德于1806年提出).它通过最小化误差的平方和寻找数据的最佳函数匹配.利用最小二乘法可以简便地求得 ...
- 【python】详解multiprocessing多进程-Pool进程池模块(二)
[python]详解multiprocessing多进程-process模块(一) [python]详解multiprocessing多进程-Pool进程池模块(二) [python]详解multip ...
- 【python】什么是序列,Python序列详解
什么是序列,Python序列详解 概述 序列索引 序列切片 序列相加 序列相乘 检查元素是否包含在序列中 序列相关的内置函数 range 快速初始化数字列表 概述 所谓序列,指的是一块可存放多个值的连 ...
- python多线程详解 Python 垃圾回收机制
文章目录 python多线程详解 一.线程介绍 什么是线程 为什么要使用多线程 总结起来,使用多线程编程具有如下几个优点: 二.线程实现 自定义线程 守护线程 主线程等待子线程结束 多线程共享全局变量 ...
- Python线程详解
Python线程详解 线程简介 开启多线程 线程之间共享 GIL全局解释器锁 线程间通信 线程简介 线程,有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元. ...
最新文章
- yolov5改进mark
- 自然水体辐射特性与数值模拟 pdf_【技术·航天】定量评估贡献 精准决策未来 ——气象卫星数据在数值预报系统中贡献的定量评估...
- Java 里的泛型简介.
- rxjs里scan operators的用法
- 【theano-windows】学习笔记九——softmax手写数字分类
- 大专计算机应用基础课件,11春大专《计算机应用基础》练习课件.doc
- 2020 年百度之星·程序设计大赛 - 复赛 1001Battle for Wosneth
- hdu 4315 Climbing the Hill 博弈问题,可转化为nim游戏问题,多校联合赛(二)第六题
- 高分1、2号卫星原始遥感影像数据
- vue动态绑定背景图片的透明度
- 「第五章」点击劫持(ClickJacking)
- android 删除短信无效,android删除短信(绕过权限)
- 贴片电解电容47UF16V 6.3*4.5
- MTK 安卓11 传感器兼容 陀螺仪42607-p
- 国内CRM系统哪家好 CRM管理系统推荐
- 完美解决丨1. **`SyntaxError: invalid syntax`**
- caffe/ windows 10 /Can't parse message of type caffe.NetParameter because it is missing required
- B2B策划书:在线B2B行业小额批发平台
- 阿里云OSS文件批量打包下载
- linux pppoe拨号上网