You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Python导入模块时,模块顶层print会早于import后的代码输出?

Python模块导入输出顺序问题解答

核心原因

该输出顺序是Python的模块导入机制的正常表现,遵循两个基础规则:

  • 执行import 模块名语句时,Python会先完整执行被导入模块的所有顶层代码(即不在函数、类等嵌套代码块中的可执行语句),模块加载完成后才会继续执行当前文件import语句后的代码
  • 模块的__name__属性随运行场景变化:作为入口直接运行时__name__值为__main__,被其他文件导入时__name__值为模块自身的名称

完整执行流程

对应代码运行two.py时的执行顺序如下:

  • 运行two.py作为程序入口,从上到下执行代码,首先命中第一行import one,启动one模块的加载流程
  • 逐行执行one.py的顶层代码:
    • 先完成func函数的定义,该步骤无输出
    • 执行顶层print("top level one.py"),输出对应内容
    • 判断if __name__ == '__main__':one此时是被导入的模块,__name__值为one不满足条件,执行else分支的print("one.py has been imported"),输出对应内容
  • one模块加载完成,回到two.py继续执行后续代码:
    • 执行print("top level two.py"),输出对应内容
    • 调用one.func(),输出函数内的func in one.py
    • 最后判断two.py的__name__,因为是直接运行,所以输出two.py being run directly

代码参考

two.py

import one
print("top level two.py")

one.func() 

if __name__ == '__main__':
    print("two.py being run directly")

else:
    print("two is being imported")

one.py

def func():
    print("func in one.py")


print("top level one.py")

if __name__ == '__main__':
    print("one.py is being run directly")
else:
    print("one.py has been imported")

内容的提问来源于stack exchange,提问作者JelloSquirrel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 18:15:02