版权声明:此文首发于我的个人站带有参数的decorator 装饰器,转载请注明出处。

1
2
3
4
// 请给 @performace 增加一个参数,允许传入's'或'ms':
@performance('ms')
def factorial(n):
return reduce(lambda x,y: x*y, range(1, n+1))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import time

def performance(unit):
def a(f):
def b(*args, **kw):
t1 = time.time()
fn = f(*args, **kw)
t2 = time.time()
t = (t2-t1) if unit == 's' else (t2-t1)*1000
print 'call %s() in %s %s' % (f.__name__, t, unit)
return fn
return b
return a

@performance('ms')
def factorial(n):
return reduce(lambda x,y: x*y, range(1, n+1))

print factorial(10)
  • time.time() 获取当前时间
  • t = (t2-t1) if unit == ‘s’ else (t2-t1)*1000
    类似 js的三目运算 var t = unit == ‘s’ ? (t2-t1) : (t2-t1)*1000
  • fn.__name__ 获取函数名
  • ‘call %s() in %s %s’ % (f.name, t, unit) %加字母,可对字符串传参