Python导入模块时模块函数先于print语句执行的原因咨询
现象原因解释
这是Python模块导入的标准执行逻辑导致的,和你写print的顺序没有关系:
- 解释器碰到
import/from ... import ...语句时,会先暂停当前文件的执行,转去加载对应的被导入模块:按从上到下的顺序跑完模块里所有顶层作用域的可执行代码,等模块全部加载完成,才会回到当前文件,继续执行导入语句后面的代码。 - 你看到models里的逻辑先跑,说明你在
eq_melting.py、frac_melting.py两个文件的最外层(也就是没有缩进、不在任何def/class代码块内部的位置)直接写了打印、函数调用这类会立刻执行的代码,这些代码会在导入阶段就被触发,自然比main.py里导入后的print先运行。
正确的模块编写方式
模块文件里只放函数、类的定义,不要在顶层直接写执行业务逻辑的代码。如果需要给单个模块写自测代码,统一放到if __name__ == '__main__':代码块下即可:
# 函数定义部分,导入时只会加载函数,不会执行内部逻辑 def eq_melting_calc(): print("平衡熔融计算逻辑") # 以下代码仅在你直接运行当前这个py文件时执行,被其他文件导入时不会触发 if __name__ == '__main__': eq_melting_calc() print("模块自测输出")
内容的提问来源于stack exchange,提问作者Sanju Halder
相关产品推荐
相关产品推荐

