在何处包装函数

2024-04-19 02:59:52 发布

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

对于包装函数,为什么以下方法不起作用:

# 3. DISALLOW EXECUTION IN MAIN
def disallow_main(func):
    if __name__ == '__main__':
        raise RuntimeError("Cannot run from main.")
    return func

@disallow_main
def echo(prompt='-> '):
    _inp = input(prompt)
    print ("ECHO: %s" % _inp)

也就是说,为什么在定义函数之前它会引发?如何正确地构造包装?你知道吗


Tags: 方法函数nameinifmaindefprompt
1条回答
网友
1楼 · 发布于 2024-04-19 02:59:52

正如在注释中所指出的,这解释了为什么检查在发生的时候发生,但是仍然不能做您想要的事情。此检查仅检查包含disallow_main的模块是否为__main__;而不检查调用代码是否为__main__。你需要一个更复杂的检查来完成你想要的。你知道吗


您需要将传递的函数包装到执行检查的包装函数中。您在运行decorator时进行检查,这与调用函数时是分开的。你知道吗

def disallow_main(func):
    def wrapper(*args):
        if __name__ == '__main__':
            raise RuntimeError("Cannot run from main.")
        else:
            func(*args)

    return wrapper

注意wrapper是如何返回的,一旦完成验证,它就调用func。你知道吗

相关问题 更多 >