1.装饰器 decorator
执行有装饰器的函数,现将函数看做参数传入装饰器,最后根据返回值去接着执行该函数。
其意义在于执行某个函数的前后可以执行其他的函数或者语句,可以复用。
把@log
放到now()
函数的定义处,相当于执行了语句:
now = log(now)
mport time
import functools
def metric(fn):
print('%s executed in %s ms' % (fn.__name__, 10.24))
return fn
@metric
def fast(x, y):
time.sleep(0.0012)
return x + y
@metric
def slow(x, y, z):
time.sleep(0.1234)
return x * y * z
f = fast(11, 22)
s = slow(11, 22, 33)
if f != 33:
print('测试失败!')
elif s != 7986:
print('测试失败!')
def logger(text):
def decorator(func):
@functools.wraps(func) #保留函数的__name__值 wrapper.__name__ = func.__name__
def wrapper(*args, **kw):
print('%s %s():' % (text, func.__name__))
func(3, 6)
print(*args, **kw)
return print(111)
return wrapper
return decorator
@logger('DEBUG')
def today(x,y):
print(x+y)
print('2015-3-25')
today(1,2)
print(today.__name__)