5

我正在编写 Python 3 代码,出于某种原因,我想在内存中运行所有内容,并且在磁盘上不保存任何文件。到目前为止,我通过在这里阅读答案设法解决了几乎所有的问题,但我被困在这些方面:

>>> code = compile(source, filename, 'exec')
>>> exec code in module.__dict__

我真的不明白第二行是做什么的,因为我有“in”与循环连接并测试某些东西是否在某个集合中,但情况并非如此。

那么,第二行是做什么的呢?由于在 py3 中是 exec 函数,而不是关键字,它的 Python 3 等价物是什么?

4

3 回答 3

5
exec code in module.__dict__ 

表示执行名为'code'的文件或字符串中的命令,从'code'中获取全局和局部变量,并将'code'中module.__dict__创建的局部和全局变量存储到字典中module.__dict__

请参阅http://docs.python.org/reference/simple_stmts.html#exec

例如:

In [51]: mydict={}

In [52]: exec "val1=100" in mydict

In [53]: mydict['val1']
Out[53]: 100

例2:

In [54]: mydict={}

In [55]: mydict['val2']=200

In [56]: exec "val1=val2" in mydict

In [57]: mydict.keys()
Out[57]: ['__builtins__', 'val2', 'val1']

In [58]: mydict['val2']
Out[58]: 200

In [59]: mydict['val1']
Out[59]: 200
于 2012-09-20T22:19:50.433 回答
2

在 Python 3 中,该 exec 行将转换为:

exec(code, module.__dict__)

Python 3 帮助文件的摘录:

exec(object[, globals[, locals]]) 

在所有情况下,如果省略了可选部分,则代码将在当前范围内执行。如果只提供全局变量,它必须是一个字典,它将用于全局变量和局部变量。如果给出了全局变量和局部变量,则它们分别用于全局变量和局部变量。如果提供,locals可以是任何映射对象。

于 2012-09-20T22:19:55.627 回答
2

in关键字指定用于全局和局部命名空间的字典。来自 python 2文档exec

在所有情况下,如果省略了可选部分,则代码将在当前范围内执行。如果只in指定了之后的第一个表达式,它应该是一个字典,它将用于全局变量和局部变量。

因此,python 3 等效项是exec(code, module.__dict__).

于 2012-09-20T22:21:08.063 回答