【发布时间】:2013-07-24 08:07:12
【问题描述】:
http://docs.python.org/2/library/runpy.html#runpy.run_module
我的问题是关于 run_module 文档的这一部分。
...然后在新的模块命名空间中执行。
什么是 python 中的“模块命名空间”? runpy 与 import 有何不同?
【问题讨论】:
http://docs.python.org/2/library/runpy.html#runpy.run_module
我的问题是关于 run_module 文档的这一部分。
...然后在新的模块命名空间中执行。
什么是 python 中的“模块命名空间”? runpy 与 import 有何不同?
【问题讨论】:
每个模块都使用自己的一组全局变量执行,这些变量成为模块的属性。模块命名空间是模块的全局变量所在的位置; “在新的模块命名空间中执行”意味着“使用自己的全局变量环境执行”。
Python 解释器仅在模块的代码第一次被导入任何给定程序时执行。进一步的导入语句只是返回现有的模块对象。当模块a和b都导入模块c和d时,这可以防止指数导入爆炸,这两个模块都导入e和f等。这也意味着所有模块看到相同的版本,比如collections.defaultdict,所以类型检查的行为很直观。 runpy.run_module 说“运行这个模块中的代码,无论它是否已经被导入,并且不要将其视为导入。”如果你先run_module 一个模块然后__import__ 它,你从run_module 得到的字典将包含与你从__import__ 得到的模块中的对象非常相似但又不同的对象。
【讨论】: