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

Python中exec函数传入空字典作为locals参数时的工作机制解析

exec() 传入locals字典的原理解析

先看你运行的代码:

c = '''x = 1 
def __init__(self,n):self.name = n 
def printD(self):print(self.name)'''

d = {}
print(d)

exec(c,globals(),d)
print(d)

核心逻辑:exec() 直接复用你传入的locals字典

当你给exec()第三个参数(也就是locals)传了字典d,Python就不会再新建临时的本地作用域,而是把这个字典当作代码块执行时的本地命名空间来用。

代码块里所有的赋值操作、函数定义,都会直接写入这个字典:

  • 变量x = 1会在d里添加键'x',对应值1
  • 定义的__init__函数,会以函数对象为值存入d的'__init__'键下
  • 定义的printD函数,会以函数对象为值存入d的'printD'键下

这就是为什么执行完exec()后,原本空的d会被填满——它就是代码块运行时的本地命名空间载体。

和默认行为的区别

如果不传第三个locals参数,exec()会使用当前上下文的本地命名空间,但由于Python对函数内的本地变量做了优化,这些修改无法被外部获取到。而手动传入字典的方式,相当于强制把代码块的本地变量暴露到你指定的容器里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:22:14