python之道14
看代码写结果:
def wrapper(f):
def inner(*args,**kwargs):
print(111)
ret = f(*args,**kwargs)
print(222)
return ret
return inner
def func():
print(333)
print(444)
func()
print(555)
答案
444
333
555
编写装饰器,在每次执行被装饰函数之前打印一句’每次执行被装饰函数之前都得先经过这里,这里根据需求添加代码’。
答案
def warpper(f):
def inner(*args,**kwargs):
print('每次执行被装饰函数之前都得先经过这里,这里根据需求添加代码')
ret = f(*args,**kwargs)
return ret
return inner
@warpper
def func():
print(111)
func()
为函数写一个装饰器,把函数的返回值 +100 然后再返回。
@wrapper
def func():
return 7
result = func()
print(result)
答案
def warpper(f):
def inner(*args,**kwargs):
ret = f(*args,**kwargs)+ 100
return ret
return inner
@wrapper
def func():
return 7
result = func()
print(result)
# 106
请实现一个装饰器,通过一次调用使用函数重复执行5次。
答案
def wrapper(f):
def inner(*args,**kwargs):
for i in range(5):
f(*args,**kwargs)
return inner
@wrapper
def func():
print(222)
func()
# 输出结果
222
222
222
222
222
请实现一个装饰器,每次调用函数时,将函数名以及调用此函数的时间节点写入文件中。
可用代码:
import time
struct_time = time.localtime()
print(time.strftime("%Y-%m-%d %H:%M:%S",struct_time)) # 当前时间节点
def wrapper():
pass
def func1(f):
print(f.__name__)
func1(wrapper)
函数名通过: 函数名.__name__获取。
答案
import time
# struct_time = time.localtime()
# print(time.strftime("%Y-%m-%d %H:%M:%S",struct_time)) # 当前时间节点
def wrapper(f):
def inner(*args, **kwargs):
with open('a.txt',mode='r+',encoding='utf-8') as f1:
f1.read()
struct_time = time.localtime()
ret = f(*args, **kwargs)
f1.write(f"函数名:{f.__name__},当前时间节点:{time.strftime('%Y-%m-%d %H:%M:%S', struct_time)}\n")
return ret
return inner
@wrapper
def func1(f):
print(f.__name__)
func1(wrapper)
# 输出文件的结果
函数名:func1,当前时间节点:2019-06-24 19:08:01
函数名:func1,当前时间节点:2019-06-24 19:08:08