在调用函数之前,我是否可以延迟装饰程序的执行?

2024-06-25 05:45:38 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,我了解了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:
        ...

但我只是觉得装饰师优雅易懂,所以问题是:

在调用函数之前,是否可以延迟装饰程序的执行?


Tags: andgohomeageyourreturnifdef
1条回答
网友
1楼 · 发布于 2024-06-25 05:45:38

诀窍就是确保检查发生在你的内部函数中,而不是外部函数。就你而言:

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

相关问题 更多 >