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

Python函数与命名空间疑问:不同嵌套下变量访问结果为何不同?

Python函数与命名空间:两个示例的运行差异解析

你困惑的核心是Python的变量查找规则和函数定义位置带来的命名空间差异,直接看两个示例的区别:

示例1:全局定义的函数

def f1():
    a = 1
    f2()

def f2():
    print(a)

a = 0
f1()

运行输出0,原因是:

  • f2是全局函数,它的命名空间和f1的局部命名空间完全独立
  • 当f2执行print(a)时,Python按「局部→闭包→全局→内置」的顺序找变量:
    1. f2自己的局部空间没有a
    2. f2没有嵌套在其他函数里,跳过闭包层
    3. 找到全局空间中定义的a = 0,所以输出0
  • f1里的a = 1是f1的局部变量,f2根本访问不到这个命名空间的内容

示例2:嵌套定义的闭包函数

def f1():
    a = 1
    def f2():
        print(a)
    f2()

a = 0
f1()

运行输出1,原因是:

  • f2是嵌套在f1内部的函数(闭包),它会绑定外层函数f1的局部命名空间
  • 当f2执行print(a)时,变量查找顺序:
    1. f2自己的局部空间没有a
    2. 直接找到外层f1的局部空间里的a = 1,所以输出1
    3. 这一步已经找到变量,不会再去全局空间查找

内容的提问来源于stack exchange,提问作者Adam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:24:56