Python中main函数与import用法的深入解析

Leo
Leo
发布时间:2026-10-16 | 3人浏览过
原创

本文深入解析Python中main函数与import的交互机制。通过实例说明模块导入时函数外语句自动执行的潜在问题,并详细阐述如何利用__name__ == '__main__'判断语句使脚本既可直接运行又安全导入。该方法不仅避免了导入时的副作用,还优化了代码调试流程,是Python开发中的关键实践。

main函数与import用法

在Python中,若封装的库文件包含函数外部的语句,这些代码会在模块被导入时自动执行,从而引发非预期的行为。以下是一个具体示例。

目录结构如下

  • A.py
  • B.py

B.py中的内容如下:

def print_B():
    print("B")

print("starting B")

A.py中使用import导入print_B()方法:

from B import print_B
print_B()

结果如下:

starting B B

可以看出,B.py中函数外部的语句在导入时已自动执行。然而,在某些场景下,我们既希望模块在被直接运行时执行特定功能,又希望这些功能在通过import导入时不被触发。此时,可将相关逻辑显式封装在main函数中。

修改后的B.py如下所示:

def print_B():
    print("B")

if __name__ == "__main__":
    print("starting B")

此时运行A.py,结果如下:

B

main函数的作用以及解释

python 中name == ‘__main__’ 的作用

  • 经典的英文解释:Make a script both importable and executable
  • 中文解释:使脚本可以被调用import并且也可以直接运行

1、直接运行

# cat test_fun.py
def fun():
    print(__name__)
    print('this is fun')


if __name__ == '__main__':
    fun()
    print('this is main')
python test_fun.py
__main__
this is fun
this is main

2、被调用import

>>> import test_fun
>>> test_fun.fun()
test_fun
this is fun

调用导入时:此处输出没有显示”main“,也就是说模块name = ‘main’ 下面的代码并未执行,main函数没有执行。

这个功能还有一个用处:

调试代码的时候,在”if name == ‘main‘“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表