我正在维护一个字典,并在配置文件中加载。字典从JSON文件加载。
在config.py
name_dict = json.load(open(dict_file))
我正在使用
在其他几个脚本(file1.py,file2.py,...,filen.py)中导入此配置文件import config
语句。我的问题是config.py脚本何时执行?我确信它不会在我的多个脚本中进行的每个导入调用中执行。但是,调用import语句时会发生什么。
答案 0 :(得分:2)
模块中的顶级代码在您第一次import
时执行一次。之后,模块对象将在sys.modules
中找到,代码将不会被重新执行以重新生成它。
有一些例外:
reload
。sys.path
的包中间有一些目录,那么最终可能会mypackage.mymodule
1}}和mymodule
是同一个东西的两个副本,在这种情况下代码会运行两次)。sys.modules
进行编辑。imp
/ importlib
之类的功能。multiprocessing
的某些案例(以及间接使用它的模块,如concurrent.futures
)。对于Python 3.1及更高版本,这些都在The import system下详细描述。特别是,请查看“搜索”部分。 (针对该模块描述了multiprocessing
特定情况。)
对于早期版本的Python,您几乎必须从各种不同的来源推断行为,并阅读代码或进行实验。但是,记录良好的新行为旨在像旧的行为一样工作,除非有明确描述的方式,因此即使对于2.x,您通常也可以阅读3.x文档。
注意一般,您不希望依赖于模块中的顶级代码是运行一次还是多次运行。例如,给定一个顶级函数定义,只要你从不比较函数对象,或重新绑定任何全局变量(它意味着定义本身,而不仅仅是正文)依赖于它,它就没有任何区别。但是,有一些例外,加载启动时配置文件是异常的一个完美示例。