2

最初に、Pythonデコレータとは何か、そしてそれらがどのように機能するかを学びました。そして、私はそれがこのようなことをしたいと思います:

def age_over_18(go_enjoy_yourself):

    def go_home_and_rethink_your_life():

        return 'So you should go home and rethink your life.'

    return go_enjoy_yourself if age_stored_somewhere > 18 else go_home_and_rethink_your_life

@age_over_18
def some_porn_things():

    return '-Beep-'

しかし、関数がPythonによって最初に読み取られたときにデコレータが実行されることがわかりました。つまり、この関数は実際には何もしません。

私は次のようなものを書くことができることを知っています:

def some_porn_things():

    if age_stored_somewhere > 18:
        ...
    else:
        ...

しかし、デコレータは優雅で理解しやすいと思うので、問題は次のとおりです。

関数を呼び出すまでデコレータの発生を遅らせることはできますか?

4

1 に答える 1

7

トリックは、外側の関数ではなく、内側の関数でチェックが行われるようにすることです。あなたの場合:

def age_over_18(go_enjoy_yourself):
    def are_you_over_18():
        if age > 18:
            return go_enjoy_yourself()
        else:
            return 'So you should go home and rethink your life.'

    return are_you_over_18
于 2012-05-28T12:36:00.290 に答える