# decorator
import time
import datetime
from pytz import timezone
from functools import wraps
def log(func):
def wrapper(*args, **kwargs):
print(f"call {func.__name__}")
return func(*args, **kwargs)
return wrapper
def log1(text):
def decorator(func):
@wraps(func)
print(f"called function:{func.__name__}")
return decorator
@log1("execute")
def now():
tz = timezone('Asia/Shanghai')
t = datetime.datetime.fromtimestamp(int(time.time()), tz).strftime('%Y-%m-%d %H:%M:%S')
return t
def metric(fn):
@wraps(fn)
print('%s executed in %s ms' % (fn.__name__, 10.24))
return fn(*args, **kwargs)
@metric
def fast(x, y):
time.sleep(0.0012)
return x + y
def slow(x, y, z):
time.sleep(0.1234)
return x * y * z
def log2(fn):
print("begin call function: %s" % fn.__name__)
fn(*args, **kwargs)
print("end call function: %s" % fn.__name__)
return
def log3(fn_or_desc):
if type(fn_or_desc) == str:
def derocator(fn):
return derocator
else:
@wraps(fn_or_desc)
print("begin call function: %s" % fn_or_desc.__name__)
fn_or_desc(*args, **kwargs)
print("end call function: %s" % fn_or_desc.__name__)
@log2
def test2():
print("function name: %s" % test2.__name__)
@log3
def test3_1():
print("function name: %s" % test3_1.__name__)
@log3("execute")
def test3_2():
print("function name: %s" % test3_2.__name__)
if __name__ == '__main__':
print(now())
print(now.__name__)
f = fast(11, 22)
s = slow(11, 22, 33)
if f != 33:
print('测试失败!')
elif s != 7986:
print("测试成功")
test2()
test3_1()
test3_2()
Sign in to make a reply
90丶无悔
# decorator
import time
import datetime
from pytz import timezone
from functools import wraps
def log(func):
def wrapper(*args, **kwargs):
print(f"call {func.__name__}")
return func(*args, **kwargs)
return wrapper
def log1(text):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
print(f"called function:{func.__name__}")
return func(*args, **kwargs)
return wrapper
return decorator
@log1("execute")
def now():
tz = timezone('Asia/Shanghai')
t = datetime.datetime.fromtimestamp(int(time.time()), tz).strftime('%Y-%m-%d %H:%M:%S')
return t
def metric(fn):
@wraps(fn)
def wrapper(*args, **kwargs):
print('%s executed in %s ms' % (fn.__name__, 10.24))
return fn(*args, **kwargs)
return wrapper
@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
def log2(fn):
@wraps(fn)
def wrapper(*args, **kwargs):
print("begin call function: %s" % fn.__name__)
fn(*args, **kwargs)
print("end call function: %s" % fn.__name__)
return
return wrapper
def log3(fn_or_desc):
if type(fn_or_desc) == str:
def derocator(fn):
@wraps(fn)
def wrapper(*args, **kwargs):
print("begin call function: %s" % fn.__name__)
fn(*args, **kwargs)
print("end call function: %s" % fn.__name__)
return wrapper
return derocator
else:
@wraps(fn_or_desc)
def wrapper(*args, **kwargs):
print("begin call function: %s" % fn_or_desc.__name__)
fn_or_desc(*args, **kwargs)
print("end call function: %s" % fn_or_desc.__name__)
return
return wrapper
@log2
def test2():
print("function name: %s" % test2.__name__)
@log3
def test3_1():
print("function name: %s" % test3_1.__name__)
@log3("execute")
def test3_2():
print("function name: %s" % test3_2.__name__)
if __name__ == '__main__':
print(now())
print(now.__name__)
f = fast(11, 22)
s = slow(11, 22, 33)
if f != 33:
print('测试失败!')
elif s != 7986:
print('测试失败!')
else:
print("测试成功")
test2()
test3_1()
test3_2()