0

と呼ばれるデコレータがありますが、Timer理想的には、次のようなデコレータを使用します。

@Timer
def function(...):
    return None

ただし、これは呼び出されるたび functionに Timer を呼び出します。もちろん、特定のインスタンスで呼び出したい場合は、通常の関数のようにデコレータを使用できます。

function = Timer(function)

ただし、これは見栄えがよくありません (私は好き嫌いがありますが、わかります)。それで、テストファイルなどのすべてのユースケースについて、デコレータを関数にラップする方法はありますか? したがって、次のようなものです:

from app import cheese

@Timer  # Syntax error
cheese  # Syntax error

実際の関数定義の上に配置した場合、この特定のファイルに対してのみデコレータを使用し、常に使用するわけではないことに注意してください。

4

1 に答える 1

1

ファイルの先頭で有効化/無効化できる場合 (つまり、ファイルをロードするときにそれらを有効にするかどうかを知っている場合)、Enable/Disable Decoratorを使用できます。

そうでない場合...デコレータのソースを投稿していませんが、ラッピングコード自体で有効/無効のグローバル変数を参照できない理由はありません。つまり、デコレータは次のようになります。

@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より)

追加されたコードのガードを追加するだけです。

@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
于 2013-10-03T13:01:02.123 に答える