更改对外部函数的引用

Changing reference to an outer function

def foo():
    print(True)


def bar():
    foo()


def baz():
    def foo():
        print(False)

    foo()
    bar()


baz()

输出:

False
True

我需要让它输出:

False
False  

通过 bar 调用 baz 内部定义的 foo,而不触及 baz 本身之外的任何内容。

为此,您需要在全局范围内覆盖 foo 的定义。只需使用 global 关键字:

def foo():
    print(True)

def bar():
    foo()

def baz():
    global foo

    old_foo = foo # if you want to backup the original definition of foo (optional)

    def foo():
        print(False)

    foo()
    bar()

    foo = old_foo # revert foo to its original state (optional)

    baz()

输出:

False
False