装饰器练习
-
整理今天的笔记以及课上代码,以及代码的执行流程.
-
将模拟博客园使用装饰器进行编写.
-
看代码写结果:
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 func(f):
def foo():
print("每次执行被修饰函数都得先经过这里")
f()
return foo
@func
def f1():
print("你好")
# f1 = func(f1)
f1()
-
为函数写一个装饰器,把函数的返回值 +100 然后再返回。
@wrapper def func(): return 7 result = func() print(result) 答案如下 def wrapper(f): def foo(): return f() + 100 return foo @wrapper def func(): return 7 result = func() print(result)
-
请实现一个装饰器,通过一次调用使被装饰的函数重复执行5次。
def func(f):
def foo():
for i in range(5):
f()
return foo
@func
def f1():
print("nihao")
f1()
-
请实现一个装饰器,每次调用函数时,将被装饰的函数名以及调用被装饰函数的时间节点写入文件中。
可用代码: import time struct_time = time.localtime() print(time.strftime("%Y-%m-%d %H:%M:%S",struct_time)) # 获取当前时间节点 def func(): print(func.__name__) 函数名通过: 函数名.__name__获取。 import time def wrapper(f): def foo(): with open("time","a",encoding = "utf-8") as f1: struct_time = time.localtime() f1.write(time.strftime("%Y-%m-%d %H:%M:%S", struct_time)) f1.write(func.__name__) f() return foo @wrapper def func(): print("不无聊") func()