You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python内层函数与全局函数重名时如何调用全局函数

问题代码

def A():
    return 2

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

    return A()

print(B()) # 输出3

解答

完全可以,有两种常用实现方式:

  • 方法1:使用globals()内置函数直接获取全局作用域的A函数
    修改后的B函数写法如下:
def B():
    def A():
        return 3
    # 从全局作用域取A函数调用
    return globals()['A']()

此时调用print(B())就会输出2。

  • 方法2:在内层A函数定义前先给全局A函数做一个别名绑定
    如果你不想每次都写globals(),可以在定义内层同名A之前先把全局A存到别的变量里:
def B():
    # 先存全局A的引用,此时还没定义内层A,变量查找会找到全局的A
    global_A = A
    def A():
        return 3
    return global_A()

这种写法调用B()也会返回2。

Python查找变量的时候会遵循LEGB规则,优先从当前局部作用域(Local)找,找不到才会往上找闭包作用域(Enclosing)、全局作用域(Global)、内置作用域(Built-in)。你在B内部定义了同名的A之后,当前局部作用域已经有A了,所以默认会优先用内层的,只要你主动跳过局部作用域的查找,就能拿到全局的A函数。

内容的提问来源于stack exchange,提问作者Vinh Quang Tran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:45:01