概述
前言
学习就是投资自己!
一、没有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的函数名称。
总结
加油!加油!加油!
最后
以上就是糊涂猎豹为你收集整理的python中wraps的用法笔记前言一、没有wraps的代码执行总结的全部内容,希望文章能够帮你解决python中wraps的用法笔记前言一、没有wraps的代码执行总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复