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

为什么Python变量在函数内外通过locals()获取的名称存在差异?

现象原因解释

核心原因是locals()函数的返回结果完全依赖调用时所处的当前作用域,只会返回当前作用域内绑定的变量名与对应值的映射关系:

  • 全局作用域调用时
    此时locals()返回全局命名空间的变量映射,你定义的my_variable是全局作用域下绑定该列表对象的变量名,所以匹配后得到的结果是my_variable。
  • 函数内部调用时
    Python参数传递采用对象引用传递逻辑,调用print_and_logging(my_variable)时,实际是把列表对象的引用赋值给了函数的形参input。此时函数局部作用域内,该列表对象绑定的变量名是input,全局的my_variable不属于函数局部作用域的变量,locals()不会返回全局作用域的内容,所以匹配后得到的结果是input。

额外提示:通过值匹配找变量名的方式本身不可靠,如果同一个作用域内有多个变量绑定到同一个值/对象,只会返回遍历字典时第一个命中的变量名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:36:06