@log和@log_in执行顺序是什么样的?
def log(func):
""" 记录函数执行的日志 """
def wrapper():
print("start")
func()
print('end')
return wrapper
def log_in(func):
""" 记录函数执行的日志 """
def wrapper():
print("开始进入")
func()
print('结束')
return wrapper
@log
def hello():
""" 简单功能模拟 """
print('hello world')
@log
@log_in
def test():
print('test ..')
if __name__ == '__main__':
# hello()
test()
正在回答 回答被采纳积分+1
同学,你好,在调用test()函数时,会先执行离着近的装饰器@log_in,再执行@log。
在log_in函数内定义了wrapper函数,但并没有类似于wrapper()的语句,因此该函数内的语句并没有立即执行,而是作为了返回值。因此wrapper内的3条语句作为输入参数传递到了log内。
下一步是执行log函数内容。返回值为wrapper。由于更外层没有装饰器,因此接下来就将执行wrapper内的内容。打印start。接着执行func()函数,注意此处func()表示的是log_in的wrapper中的内容,因此跳到log_in的wrapper中执行。打印值为“开始进入”。
类似的,log_in的wrapper中的func()为test(),因此接着会输出“test ..”,继续执行输出“结束”,最后,回到log的最后一行,输出“end”。到这里,整个装饰器的运行过程结束。
这里都是文字,不太好理解,同学可以在debug格式下进行一步步的调用更方便同学理解。
如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~
- 参与学习 人
- 提交作业 2727 份
- 解答问题 8160 个
想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星