Py学习  »  Python

Python Decorators导入时间

AdamGold • 6 年前 • 2526 次点击  

我正在全局集中注册一些函数:

# 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
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/52047
文章 [ 2 ]  |  最新文章 6 年前