为什么Python变量在函数内外通过locals()获取的名称存在差异?
现象原因解释
核心原因是locals()函数的返回结果完全依赖调用时所处的当前作用域,只会返回当前作用域内绑定的变量名与对应值的映射关系:
- 全局作用域调用时
此时locals()返回全局命名空间的变量映射,你定义的my_variable是全局作用域下绑定该列表对象的变量名,所以匹配后得到的结果是my_variable。 - 函数内部调用时
Python参数传递采用对象引用传递逻辑,调用print_and_logging(my_variable)时,实际是把列表对象的引用赋值给了函数的形参input。此时函数局部作用域内,该列表对象绑定的变量名是input,全局的my_variable不属于函数局部作用域的变量,locals()不会返回全局作用域的内容,所以匹配后得到的结果是input。
额外提示:通过值匹配找变量名的方式本身不可靠,如果同一个作用域内有多个变量绑定到同一个值/对象,只会返回遍历字典时第一个命中的变量名。
内容的提问来源于stack exchange,提问作者Benjamin T
相关产品推荐
相关产品推荐

