【发布时间】:2015-05-25 08:17:01
【问题描述】:
让我们假设一个简单的方法:
def test_method():
a = 1
b = 10000
c = 20000
sum1 = sum(range(a,b))
sum2 = sum(range(b,c))
return (sum1,sum2)
要使用装饰器对这个方法计时,一个简单的装饰器应该是:
from functools import wraps
def timed_decorator(f):
@wraps(f)
def wrapper(*args, **kwds):
start = time.time()
result = f(*args, **kwds)
elapsed = (time.time() - start)*1000
logger.debug("f::{0} t::{1:0.2f} ms".format(f.__name__, elapsed))
return result
return wrapper
现在,如果我想为 test_method 的特定行计时,比如第 4 行 sum1 = sum(range(a,b)) ,当前的实现涉及内联编码,例如:
def test_method():
a = 1
b = 10000
c = 20000
start = time.time()
sum1 = sum(range(a,b)) # timing specific line or lines
elapsed = (time.time() - start)*1000
logger.debug("This part took::{1:0.2f} ms".format(elapsed))
sum2 = sum(range(b,c))
return (sum1,sum2)
目的是在不修改方法中的代码的情况下,使用装饰器对特定方法的 M 到 N 行进行时间处理。 是否可以使用装饰器注入这样的逻辑?
【问题讨论】:
标签: python