如何用python装饰器_如何在python开发中使用装饰器(一)

?为什么要使用装饰器

在软件开发的过程中,我们发现经常用到重复的代码,这就大大的增加了开发的周期,为了使得开发更为高效,python中主要特性之一就是装饰器。(修改/生成/包装经常使用的代码)

?如何自己编写一个装饰器函数

有时候,我们会遇到这样的问题,事先已经写好某些函数,但是想要在这些函数的基础上添加一些额外的功能(登录验证/记录日志/生成时间戳)

定义一个装饰器函数:

>>> import time

>>> from functools import wraps

>>>

>>>

>>> def timeabout(func):

'''定义一个装饰器用来生成执行某函数需要的时间戳'''

@wraps(func)

def wrapper(self, *args, **kwargs):

s = time.time() #开始时间

result = func(self, *args, **kwargs) #func指的未被装饰的原始函数

e = time.time() #结束时间

print(func.__name__,e - s) #打印两部分内容(被装饰的函数名,需要的时间戳)

return result

return wrapper

使用此装饰器

>>>@timeabout #使用此装饰器对下列阶乘函数进行包装处理

def factorial(n):

if n == 1:

return 1

else:

return factorial(n-1)*n

>>>

>>> factorial(10)

factorial 0.0

factorial 0.05403733253479004 #经过装饰器处理的阶乘函数

factorial 0.06404519081115723

factorial 0.07304859161376953

factorial 0.08205389976501465

factorial 0.0930624008178711

factorial 0.10106801986694336

factorial 0.10907340049743652

factorial 0.11607766151428223

factorial 0.12308287620544434

3628800 #阶乘函数的结果

>>>

装饰器即函数,可以接受函数作为输入,并且返回一个新的函数作为输出。

#方法一和方法二执行后效果一样

#方法一

@timeabout

def factorial(n):

if n == 1:

return 1

else:

return factorial(n-1)*n

#方法二

```python

def factorial(n):

if n == 1:

return 1

else:

return factorial(n-1)*n

factorial = timeabout(factorial)

装饰器内部创建了一个新的函数(如wrapper),*args, **kwargs用来接收任何形式的输入参数。如需了解python中的函数如何使用,请浏览本作者关于函数的文章。

在此函数wrapper内部,需要调用原来的函数(需要装饰的函数),将其作为参数输入,并返回结果。

可以添加额外的代码,实现其它的方法。

新的函数(如wrapper)会作为此装饰器的结果返回,取代原来的函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值