首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按需装修?

按需装修?
EN

Stack Overflow用户
提问于 2013-10-03 12:19:40
回答 1查看 159关注 0票数 0

我有一个名为Timer的装饰师,现在理想的情况是使用这样的装饰器:

代码语言:javascript
复制
@Timer
def function(...):
    return None

但是,这会在调用function时一直调用Timer。当然,当您想要在特定实例下调用它时,您可以使用像普通函数这样的装饰器来完成此操作:

代码语言:javascript
复制
function = Timer(function)

然而,这看起来不漂亮(我知道,我很挑剔)。那么,是否有一种方法可以对函数进行包装,比如测试文件中的所有用例?所以,就像:

代码语言:javascript
复制
from app import cheese

@Timer  # Syntax error
cheese  # Syntax error

注意,如果您将它放在实际函数定义之上,它只对这个特定的文件使用装饰符,而不是一直使用它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-03 13:01:02

如果您可以在文件顶部启用/禁用(即,您知道何时加载文件,无论是否启用它们),则可以使用启用/禁用解码器

如果不是..。您没有发布装饰器的源代码,但是它没有理由不能引用包装代码本身中启用/禁用的全局变量。也就是说,一个装饰师看起来是这样的:

代码语言:javascript
复制
@simple_decorator
def my_simple_logging_decorator(func):
    def you_will_never_see_this_name(*args, **kwargs):
        print 'calling {}'.format(func.__name__)
        return func(*args, **kwargs)
    return you_will_never_see_this_name

(来自https://wiki.python.org/moin/PythonDecoratorLibrary)

只需为添加的代码添加一个保护程序,即

代码语言:javascript
复制
@simple_decorator
def my_simple_logging_decorator(func):
    def you_will_never_see_this_name(*args, **kwargs):
# Added/modified code starts here
        if globalvar:
            print 'calling {}'.format(func.__name__)
# End modified code
        return func(*args, **kwargs)
    return you_will_never_see_this_name
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19159081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档