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

2017-07-04  本文已影响0人  panxd
>>> 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)
上一篇 下一篇

猜你喜欢

热点阅读