导入语句:Python配置文件

3

我是一名有用的助手,可以帮您进行文本翻译。

我正在维护一个字典,它被加载到配置文件中。该字典是从一个JSON文件中加载的。

在config.py中

name_dict = json.load(open(dict_file))

我正在使用以下方式在多个脚本(file1.py, file2.py,...,filen.py)中导入此配置文件。

import config

语句。我的问题是config.py脚本何时执行?我确定它不会在我的多个脚本中进行每次导入调用时都执行。但是,当导入语句被调用时,到底会发生什么。

1个回答

2
模块中的顶层代码在第一次导入时执行一次。之后,模块对象将在 sys.modules 中找到,并且代码不会被重新执行以重新生成它。
但是,以下情况有例外:
  • reload,显然需要重新加载。
  • 意外地使用两个不同名称导入相同的模块(例如,如果该模块在包中,并且您在包的中间某个目录中有一些目录,则可能会出现mypackage.mymodulemymodule是相同的东西,这种情况下代码会运行两次)。
  • 安装替换标准行为的导入钩子/自定义导入。
  • 明确更改了 sys.modules
  • 直接从 imp/importlib 或类似工具中调用函数。
  • 某些与multiprocessing相关的情况(以及间接使用它的模块,例如 concurrent.futures)。

对于Python 3.1及更高版本,这些内容都在导入系统下详细描述。特别是要看搜索部分。(multiprocessing模块的特定情况已经描述了。)
对于早期版本的Python,你几乎必须从各种不同的来源推断出行为,并阅读代码或进行实验。然而,这种有良好文档记录的新行为意图像旧行为一样工作,除了特定的描述方式之外,因此你通常可以通过阅读3.x文档来理解2.x的行为。
请注意,通常情况下,您不应该依赖于模块中顶层代码运行一次还是多次。例如,给定一个顶层函数定义,只要您从不比较函数对象或重新绑定任何它(即定义本身,而不仅仅是函数体)依赖的全局变量,就没有任何区别。但是,也有一些例外情况,加载启动时间配置文件就是一个完美的例子。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接