在python中导入的行为

时间:2019-07-01 21:25:12

标签: python python-3.x python-import

可以安全地假设python模块只计算一次吗? 如果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... ?下一个结构会解决吗?

// Show it
ShowMessage('►'); 
// Or use it in your string:
line := line + #13  + '►' + NewLine;

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

1 个答案:

答案 0 :(得分:2)

好吧,让我们尝试一下:

  

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模块时指定的全局变量)它适用于整个程序,而不仅仅是修改它的文件。


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