python习题,关于装饰器的练习
习题1
看代码写结果:
def warpper(f):
def inner(*args, **kwargs):
print(111)
ret = f(*args, **kwargs)
print(222)
return ret
return inner
@warpper
def func():
print(333)
运行结果:
111
333
222
555
习题2
编写装饰器,在每次执行被装饰函数之前打印一句话'每次执行被装饰函数之前都得先经过这里',这里根据需求添加代码.
def warpper(f):
def inner(*args, **kwargs):
print('每次执行被装饰函数之前都得先经过这里!')
f(*args, **kwargs)
return inner
@warpper
def func():
print('我是函数func')
func()
# 运行结果:
# 每次执行被装饰函数之前都得先经过这里!
# 我是函数func
习题3
为函数编写一个装饰器,把函数的返回值+100然后再返回.
例题
@warpper
def func():
return 7
result = func()
print(result)
结果:
def warpper(f):
def inner(*args, **kwargs):
ret = f(*args, **kwargs)
return ret + 100
return inner
@warpper
def func():
return 7
result = func()
print(result)
# """
# 107
# """
习题4
请实现一个装饰器,通过一次调用是函数重复执行5次
def warpper(f):
def inner(*args, **kwargs):
for i in range(5):
f(*args, **kwargs)
return inner
@warpper
def func():
print('in func')
func()
# """
# in func
# in func
# in func
# in func
# in func
# """
习题5
请实现一个装饰器,每次调用函数时,将函数名以及调用此函数的时间节点写入文件中。
函数名通过:函数名.__name__获取
import time
def warpper(f):
def inner(*args, **kwargs):
write_file(f.__name__)
f(*args, **kwargs)
return inner
def write_file(func_name):
with open('call_time.txt', encoding='utf-8', mode='a+') as f:
t = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
f.write(f'{t} 调用了函数{func_name}\n')
@warpper
def func():
print('in func')
return func
if __name__ == '__main__':
func()
# 运行结果:
# call_time.txt
# 2021-04-17 09:50:09 调用了函数func
# 2021-04-17 09:50:29 调用了函数func

浙公网安备 33010602011771号