http://docs.python.org/2/library/runpy.html#runpy.run_module
我的问题是关于run_module文档的这一部分。
...然后在新模块命名空间中执行。
python中的“模块名称空间”是什么? runpy在哪些方面与 import 不同?
答案 0 :(得分:1)
每个模块都使用自己的一组全局变量执行,这些变量将成为模块的属性。模块命名空间是模块的全局变量; “在新模块名称空间中执行”意味着“使用自己的全局变量环境执行”。
Python解释器仅在第一次导入任何给定程序时执行模块的代码。进一步的import语句只返回现有的模块对象。当模块a
和b
导入模块c
和d
时,这会阻止指数导入爆炸,导入模块e
和f
等。这也意味着所有模块都会看到collections.defaultdict
的相同版本,因此类型检查的行为直观。 runpy.run_module
表示“运行此模块中的代码,无论是否已导入,并且不将其视为导入。”如果你run_module
一个模块然后__import__
它,你从run_module
获得的dict将包含与你从{{1}获得的模块中的对象非常相似但不同的对象}}