我正在全局集中注册一些函数:
# registry.py
import functools
schedule_registry = set()
def register_scheduler(func):
@functools.wraps(func)
def func_wrapper():
print(f"adding {func.__name__}")
schedule_registry.add(func)
return func
return func_wrapper
@register_scheduler
def foo():
print("running foo")
现在,我想
schedule_registry
在导入时填写(并打印“添加…”),但令我惊讶的是:
In [1]: import registry
In [2]:
什么都没印。
问题是,如果我将decorator更改为以下内容:
def register_scheduler():
def func_wrapper(func):
print(f"adding {func.__name__}")
schedule_registry.add(func)
return func
return func_wrapper
@register_scheduler()
def foo():
print("running foo")
我得到了我想要的:
In [1]: import registry
adding foo