码迷,mamicode.com
首页 > 编程语言 > 详细

Python基础之装饰器

时间:2020-06-19 23:06:26      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:int   def   接收   定义函数   att   attr   需要   示例   类型   

测码学院

 

1、装饰器本质是一个高阶函数。接收一个函数作为参数,并且返回一个函数的高阶函数。示例:def decorator(func): def wrapper(): python 代码 func() python 代码 return wrapper

 

2、通过__name__ 属性来获取;

 

技术图片

 

3、通过getattr(func,‘__name__‘)来获取。

 

技术图片

 

4、计算sayHello()方法运行的时间。import timedef calculateTime(func): def wrapper(): starttime=time.time() func() endtime=time.time() print ‘运行的时间:‘,endtime-starttime return wrapperimport time@calculateTimedef sayHello(): time.sleep(5) print ‘hello‘sayHello()

 

技术图片

 

5、在这里说明下 :@calculateTime 置于方法定义之前,类似于 执行sayHello=calculateTime(sayHello) 这串代码。定义函数:import timedef sayHello(): time.sleep(5) print ‘hello‘装载函数:sayHello=calculateTime(sayHello)调用函数:sayHello()那么现在sayHello对象指向的就是calculateTime返回的wrapper函数,所以调用sayHello的时候,直接调用wrapper函数。这种调用方法和上面使用@调用方法结果一样。

 

技术图片

 

6、在运行Add()前后打印日志。def calculateDigit(func): def wrapper(*args,**kw): print ‘计算开始‘ func(*args,**kw) print ‘计算结束‘ return wrapper@calculateDigitdef add(*args,**kw): sum=0 for x in args: sum=sum+x print sum

 

技术图片

 

7、说明:*args:普通的参数**kw :关键字参数,字典类型。

 

8、如果装饰器本身需要传进参数,那么需要编写一个返回装饰器的高阶函数。def returnDecorator(text): def decorator(func): def wrapper(*args,**kv): print text func(*args,**kv) return wrapper return decorator@returnDecorator(‘hello parameter‘)def add(name): print name说明:@returnDecorator(‘hello parameter‘) 返回的是decorator装饰器。然后将add作为参数传给decorator,就和前面的过程一样。

 

技术图片

 

更多关于python自动化测试学习资料可加博主qq:1993712276,或者去测码学院官网查看

Python基础之装饰器

标签:int   def   接收   定义函数   att   attr   需要   示例   类型   

原文地址:https://www.cnblogs.com/cema/p/13166566.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!