import time
def foo():
start = time.time()
time.sleep(2)
print('foo')
end = time.time()
print('spend %d' % (end-start))
foo()
1.需求算函数时间,通过改造函数来完成
2.设想如果有很多函数并且这个函数有很多人调用,如果贸然去改造将很有可能影响其他业务
3.利用装饰器来实现,请看
def foo():
time.sleep(2)
print('foo....')
def show_time(f):
def inner():
start = time.time()
f()
end = time.time()
print('spend %s' % (end-start))
return inner
a = show_time(foo)
a()
那么将要给大家看下python的优雅方法。
def show_time(f):
def inner():
start = time.time()
f()
end = time.time()
print('spend %s' % (end-start))
return inner
@show_time #等同于foo = show_time(foo)
def foo():
time.sleep(2)
print('foo....')
foo() #上面已经申明所以在这里可以直接调用
演示函数带参数
def show_time(f):
def inner(x, y):
start = time.time()
f(x, y)
end = time.time()
print('spend %s' % (end-start))
return inner
@show_time # add = show_time(add)
def add(x, y):
print(x+y)
time.sleep(1)
add(1, 2)
那么函数用*agrs应该都可以依样画葫芦了。
那么问题就来了,如果给这个装饰器再加上个参数,比如这个例子的时间输出再有需要的时候输出,一般情况不需要输出,如何做呢?
下面我们来看例子:
def logger(flag):
def show_time(f):
def inner(x, y):
start = time.time()
f(x, y)
end = time.time()
if flag == 'true':
print('spend %s' % (end-start))
return inner
return show_time
@logger('true') # 等同于show_time,那么这样就把true给传入进去了。add = logger('true')(add)
def add(x, y):
print(x+y)
time.sleep(1)
add(1, 2)
网友评论