“新模块命名空间”是什么意思w.r.t. runpy?

时间:2013-07-24 17:31:40

标签: python runpy

http://docs.python.org/2/library/runpy.html#runpy.run_module

我的问题是关于run_module文档的这一部分。

  

...然后在新模块命名空间中执行。

python中的“模块名称空间”是什么? runpy在哪些方面与 import 不同?

1 个答案:

答案 0 :(得分:1)

每个模块都使用自己的一组全局变量执行,这些变量将成为模块的属性。模块命名空间是模块的全局变量; “在新模块名称空间中执行”意味着“使用自己的全局变量环境执行”。

Python解释器仅在第一次导入任何给定程序时执行模块的代码。进一步的import语句只返回现有的模块对象。当模块ab导入模块cd时,这会阻止指数导入爆炸,导入模块ef等。这也意味着所有模块都会看到collections.defaultdict的相同版本,因此类型检查的行为直观。 runpy.run_module表示“运行此模块中的代码,无论是否已导入,并且不将其视为导入。”如果你run_module一个模块然后__import__它,你从run_module获得的dict将包含与你从{{1}获得的模块中的对象非常相似但不同的对象}}