【问题标题】:Accessing a global function from an inner function with the same name [duplicate]从同名的内部函数访问全局函数[重复]
【发布时间】:2021-11-06 14:30:38
【问题描述】:

我有以下代码:

def A():
    return 2

def B():
    def A():
        return 3

    return A()

print(B())

结果为 3,因为 return A() 使用 B() 的内部函数 A() 而不是函数 A()。是否可以在函数B()内部调用函数A()(返回2的那个)?

【问题讨论】:

    标签: python function nested-function


    【解决方案1】:

    您正在用自己的本地实现覆盖全局 A。您应该仍然可以使用 globals() trick 调用全局变量,但请注意,您所做的不是好习惯:

    return globals()["A"]()
    

    更新:这不是好的做法,因为它违反了Zen of Python 的多个原则,例如“显式优于隐式”“可读性计数”,以及“如果实现难以解释,那就是个坏主意”

    【讨论】:

    • @tdelaney 我正在尝试嵌套函数,突然想到这个问题。 Ofc,我知道这是一种不好的做法。
    • @VinhQuangTran- 使用globals() 在模块范围内访问变量不一定是坏习惯。在您的示例中这似乎很奇怪,但它只是一个微不足道的测试程序。
    • @tdelaney 正确,我在编辑中对其进行了详细说明。不好的做法不是使用globals(),而是用本地名称覆盖全局名称,这会导致意外且难以发现的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 2011-07-23
    • 1970-01-01
    相关资源
    最近更新 更多