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 回答