Python函数在模块名称空间中替换它自己

这个问题在这里已经有了答案:

  • 在不同于创建它们的函数中使用全局变量18个答案

  • 如果你没有global语句,你将会创建一个名为_run_wsgi_app的局部变量,然后将使用它,但是在全局名字空间中什么都不会改变。 使用global _run_wsgi_app确保您将全局名称重新绑定到新函数。

    请记住global的基本用法:

    def foo():
        x = 2
    def bar():
        global x
        x = 3
    
    x = 1
    print(x) # --> 1
    foo()
    print(x) # --> 1
    bar()
    print(x) # --> 3
    

    你的例子是一样的,但不是直接使用name = ...绑定名称,而是使用from ... import ... as name

    另一种在没有global情况下重新定义自身的方法是在模块对象所在的地方使用它。

    def _run_wsgi_app(*args):
        from werkzeug.test import run_wsgi_app as new_run_wsgi_app
        import sys
        sys.modules[__name__]._run_wsgi_app = new_run_wsgi_app
        return new_run_wsgi_app(*args)
    
    链接地址: http://www.djcxy.com/p/23899.html

    上一篇: Python function replacing itself in the module namespace

    下一篇: Booleans in If Statements in Python