栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python中wraps的用法笔记

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python中wraps的用法笔记

前言

学习就是投资自己!

一、没有wraps的代码执行

模板:

首先来说两个方法:
1,name:获取函数名称并显示
2,doc:获取文档说明并显示

代码示例1:
1,def m():
2, “”“这里是文档说明部分:《静夜思》”“”
3, print(‘第一句’,‘窗前明月光’)
4,if name==“main”:
5, print(“这里获取函数名:”,m.name)
6, print(“这里获取文档说明:”,m.doc)

执行结果:

代码示例2:
添加装饰器,但是不添加wraps
1,def wrapps(func):
2, def mama(*args,**kwargs):
3, print(“第二句”,‘疑似地上霜’)
4, return mama

5,@wrapps #添加装饰器
6,def m():
7, “”“这里是文档说明部分:《静夜思》”“”
8, print(‘第一句’,‘窗前明月光’)

9,if name==“main”:
10,print(“这里获取函数名:”,m.name)
11,print(“这里获取文档说明:”,m.doc)

Python 装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变)
@ 符号是装饰器的语法糖。它放在一个函数开始定义的地方(头顶),和这个函数绑定在一起。
当我们调用这个函数的时候,会先将这个函数做为参数传入它头顶,即装饰器里。
第1行定义了一个函数wrapps(),第7行定义了一个函数m(),第六行添加了一个装饰器@wrapps,即给函数m()与wrapps()绑定在一起。第11,12行调用m.__name__和m.__doc__时,实际上是将m()函数作为参数传给了函数wrapps(),这是m.__name__返回的就是mama,而m.__doc__返回的时None。为什么m.__doc__返回的是None呢,是因为__doc__返回的内容是文档说明,即三组双引号"““说明””"的内容,而mama中没有文档说明,所以返回的时None。

那怎样才能是m.__name__和m.__doc__返回的是函数m()对应的函数名和文档说明呢。接下来我们对代码示例2使用装饰器。

代码示例3:
1,from functools import wraps
2,def wrapps(func):
3,@wraps(func)
4,def mama(*args,**kwargs):
5,print(“第二句”,‘疑似地上霜’)
6, func()
7, return mama
8,@wrapps
9,def m():
10, “”“这里是文档说明部分:《静夜思》”“”
11, print(‘第一句’,‘窗前明月光’)
12,if name==“main”:
13, print(“这里获取函数名:”,m.name)
14, print(“这里获取文档说明:”,m.doc)

执行结果:

当添加上装饰器@warps后,m.__name__返回的时m()的函数名称,而不是装饰器warpps的函数名称。

总结

加油!加油!加油!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/883611.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号