先把例子敲一敲
Topic source作业1:
Python time sleep() 函数推迟调用线程的运行,可通过参数secs指秒数,表示进程挂起的时间。
Python time time() 返回当前时间的时间戳(1970纪元后经过的浮点秒数)。
def metric(fn):
@functools.wraps(fn)
def wrapper(*args, **kw):
t1 = time.time()
result = fn(*args, **kw)
t2 = time.time()
print(f'{fn.__name__} executed in: {(t2-t1)*1000} ms')
return result
return wrapper
作业2:
参考了前面童鞋的作业,主要是要判断传进来的参数是否可调用,也就是callable(),
如果可以调用,说明是传的函数,比如@log的形式,即log(now),那么就返回decorator(text),即decorator(now),此时等于原文中的第一个例子;
如果传的字符串,那么就直接返回decorator,等同于原文中的第二个例子
import functools
def log(text="call"):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kw):
if isinstance(text, str):
print(f'begin {text} {func.__name__}():')
else:
print(f'begin call {func.__name__}():')
result = func(*args, **kw)
print('end call\n')
return result
return wrapper
if not callable(text):
return decorator
return decorator(text)
# now = log(now)
@log
def now():
print('2019-07-16')
# log(now)()-->decorator(now)()-->wrapper()
# 这里text是now函数
now()
# 等同于 @log('call')
# now1 = log('call)(now1)
@log()
def now1():
print('2019-07-17')
now1()
# then = log('execute')(then)
@log('execute')
def then():
print('2019-07-18')
# log('execute')(then)()-->decorator(then)()-->wrapper()
then()
- 1
Resalee
例子1:
例子2:
作业1:
Python time sleep() 函数推迟调用线程的运行,可通过参数secs指秒数,表示进程挂起的时间。
Python time time() 返回当前时间的时间戳(1970纪元后经过的浮点秒数)。