可以安全地假设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;
最后一个问题:创建预先计算的常数的最佳实践是什么?
答案 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
中放置一个全局变量,并且file1
和file2
都对其进行了修改,则它们都将修改同一对象。这在许多内置包中可见:例如,更改sys.stdout
的值(标准输出的文件描述符,以及在首次加载sys
模块时指定的全局变量)它适用于整个程序,而不仅仅是修改它的文件。
如果您担心这种会导致错误的事情,那么最好的办法是不要使用全局变量-而是使用类,并在构造它们时为其分配默认值。