我的代码如下。
#!/usr/bin/env python3
def use_logging(func):
def _deco():
print("%s is running" % func.__name__)
func()
return _deco
@use_logging
def bar():
print('i am bar')当我执行bar()时,输出是
bar is running
i am bar当我执行use_logging(bar)()时,输出为_deco is running。
输出:
_deco is running
bar is running
i am bar我想知道为什么在执行use_logging(bar)()时会显示_deco is running,以及它是如何工作的?
另外,我在def _deco():之前添加了print ("hhhhhhh"),代码如下:
def use_logging(func):
print ("hhhhhhh")
def _deco():
print ("_deco func")
print("%s is running" % func.__name__)
func()
return _deco
@use_logging
def bar():
print('i am bar')当我再次执行use_logging(bar)()时,输出是:
hhhhhhh
hhhhhhh
_deco func
_deco is running
_deco func
bar is running
i am barfirst two lines都是"hhhhhhh“,你能告诉我为什么会显示the second "hhhhhhh”吗?
发布于 2021-03-11 02:50:32
因为当你这样做的时候:
use_logging(bar)() 完成此操作后:
@use_logging
def bar():
print('i am bar')您正在修饰上一次调用时从装饰器返回的函数。这是语法上的糖:
bar = use_logging(bar)日志记录返回内部定义的_deco函数。请注意,如果您:
print(bar)你会得到:
<function use_logging.<locals>._deco at 0x7fa2c50473a0>https://stackoverflow.com/questions/66568593
复制相似问题