5

Python中的 if __name__ == '__main__' 是什么?

 6 months ago
source link: https://foofish.net/python-name-main.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Python中的 if __name__ == '__main__' 是什么?

By 刘志军 , 2024-03-04, 分类: Python

python

新手学Python的时候,一定见过if __name__ == '__main__':这段代码,尤其是在写Python脚本的时候。

这段代码究竟是啥意思,有啥作用?

为了搞懂这行代码,首先要了解Python中的__name__属性和主程序概念。

name 属性

在Python中,每个Python文件(不管是被执行的脚本还是被导入的模块)都有一个内置的__name__属性。

当文件被直接执行时,__name__的值会被设置为'__main__',而当文件被导入到其他文件时,__name__的值则会被设置为文件的名字。

主程序和模块

主程序:就是直接被运行的Python文件,程序运行的入口,在这个文件中,__name__的值是'__main__'

模块:被其他Python文件导入(import)使用的文件。在这个文件中,__name__的值是该文件的名称。

if name == 'main'是什么?

所以,现在你应该明白这行代码的意义了吧?就是让Python判断当前运行的环境是主程序还是被导入的模块。

如果是主程序,那么 if 代码块将被执行。如果是被导入的模块,那么这部分代码就不会被执行。

为什么要这样做?

这样做有几个好处:

  1. 模块化和复用:允许单个Python文件既可以被导入使用,也可以作为独立的程序运行。
  2. 测试代码:你可以在if __name__ == '__main__':下面写一些测试代码,只有在文件作为主程序运行时这些代码才会被执行,这样就不会影响到此模块被其他文件导入时的行为。
  3. 代码清晰:这种做法可以清晰地区分模块的接口和实现,让代码更易于理解和维护。

示例

假设有两个文件:module.pymain.py

module.py内容:

def foo():
    print("foo() from module.py")

if __name__ == '__main__':
    print("module.py is being run directly")
else:
    print("module.py is being imported into another module")

main.py内容:

import module

module.foo()

当你直接运行 module.py 时,会看到"module.py is being run directly"。

但如果你运行main.pymodule.py被导入,你会看到"module.py is being imported into another module",然后是"foo() from module.py"。

通过这个例子,你可以看到if __name__ == '__main__':如何帮助区分直接执行和被导入的情况,以及如何根据不同的运行环境执行不同的代码。

这在开发大型Python应用时特别有用,可以让每个文件既可以独立运行,也可以作为模块被其他文件导入。

总结:

这行代码的作用是判断当前运行的是主程序还是被导入的模块。

关注公众号「Python之禅」,回复「1024」免费获取Python资源

python之禅

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK