在python中导入的行为

Sadderdaze

是否可以安全地假设python模块只计算一次?如果module A包含CONST_A = json.load(...)并多次导入同一程序和不同线程的不同文件中,它将仅被计算/执行一次吗?如果没有,何时CONST_A重新计算?下一个结构会解决吗?

module CALCULATE_CONST_A
    import json
    CONST_A = json.load(open(...))

module A
    from CALCULATE_CONST_A import CONST_A

further imports of A...

最后一个问题:创建预计算常数的最佳实践是什么?

绿色披风的家伙

好吧,让我们尝试一下:

tbi.py

print("Hello, World!")

file1.py

import tbi
print("This is file1")

file2.py

import file1
import tbi
print("This is file2")

现在,当我们运行时file2,我们看到:

$ python file2.py
Hello, World!
This is file1
This is file2

因此,您的问题的答案是肯定的,python模块仅执行一次如果tbi.py执行两次,我们将看到"Hello World"两次打印。因此,可以断定文件的属性是在首次导入文件时设置

此外,更多的试验可以告诉你的是,如果我把一个全局变量tbi,都file1file2修改,他们都希望能修改同一个对象。这在许多内置软件包中都是可见的:例如,更改sys.stdout(对于标准输出的文件描述符,以及在sys首次加载模块时指定的全局变量)的值,将对整个程序(而不只是文件)进行更改。修改了它。


如果您担心这种事情会导致错误,那么最好的办法就是不要使用全局变量-而是使用类并在构造它们时为其分配默认值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章