为什么要写 __name__ == “__main__”

简介: if __name__ == "__main__" 模式在Python中用于区分模块是被直接运行还是被导入。通过这种模式,可以编写既可以作为独立脚本运行又可以作为模块导入的代码,从而提高代码的重用性和可维护性。

在Python中,__name__ == "__main__" 用于确定一个模块是作为脚本直接运行还是被另一个模块导入。

模块和脚本

  • 模块:模块是一个包含Python代码的文件,可以通过import语句在其他Python文件中导入。
  • 脚本:脚本是一个可以直接运行的Python文件。

__name__ 变量

  • __name__ 是一个特殊的内置变量。当Python解释器运行一个模块时,它会为该模块定义一些特殊变量,其中之一就是 __name__。
  • 如果模块是被直接运行的,那么 __name__ 的值将是 "__main__"。
  • 如果模块是被导入的,那么 __name__ 的值将是模块的名字(即模块文件名,不包括路径和文件扩展名)。

示例

考虑以下代码:

# example.py
def main():
    print("This is the main function.")
if __name__ == "__main__":
    main()

直接运行模块

如果你直接运行 example.py:

python example.py

输出将是:

This is the main function.

这是因为当 example.py 被直接运行时,__name__ 的值是 "__main__",因此 if 条件为真,main() 函数被调用。

导入模块

如果你在另一个文件中导入 example 模块:

# another_file.py
import example

没有输出。这是因为当 example 模块被导入时,__name__ 的值是 "example",而不是 "__main__",因此 if 条件为假,main() 函数不会被调用。

修改name

将__name__修改为文件的名称

# example.py
def main():
    print("This is the main function.")
if __name__ == "example":
    main()

这样在其他的文件中调用这个module时会输出内容。

本质和用途

  • 模块重用:通过使用 if __name__ == "__main__",你可以将模块中的代码组织成可重用的函数和类,同时保留一些只能在直接运行时执行的代码。这有助于代码的模块化和重用。
  • 测试代码:你可以在 if __name__ == "__main__" 块中包含测试代码。这些代码只有在直接运行模块时才会执行,而在导入模块时不会执行。

使用main的用途

假设有两个文件 module.py 和 main.py:

# module.py
def function():
    print("Function in module.")
if __name__ == "__main__":
    print("Module is being run directly.")
else:
    print("Module has been imported.")
# main.py
import module
module.function()

运行 module.py:

python module.py

输出:

Module is being run directly.

运行 main.py:

python main.py

输出:

Module has been imported.
Function in module.

使用example的用途

在Python中,__name__ 变量的常用值有 "__main__" 和模块的名称(例如 "example")。虽然 __name__ == 'example' 这种写法并不常见,但它确实可以用于一些特定场景。以下是一些可能的使用场景:

特定模块初始化

某个特定模块被导入时执行一些初始化代码。例如:

# module.py
def initialize():
    print("Initializing module...")
if __name__ == "module":
    initialize()

在这种情况下,如果模块 module 被导入,初始化代码将会被执行。

总结

if __name__ == "__main__" 模式在Python中用于区分模块是被直接运行还是被导入。通过这种模式,可以编写既可以作为独立脚本运行又可以作为模块导入的代码,从而提高代码的重用性和可维护性。

相关文章
|
7月前
|
程序员 C语言 开发者
int main() 作用详解
int main() 作用详解
570 0
|
2月前
|
编译器 C语言
2.1 main函数
在C程序中,执行总是从`main()`函数开始。`main()`函数为程序的基本模块,其返回类型为`int`,表示返回一个整数值。尽管函数名后的括号通常包含传入信息,但在本例中其为空,表明无参数传递。注意旧版C代码可能省略`int`与`(void)`,但现代标准如C99和C11不支持这种写法,因此应避免使用。
27 8
|
7月前
! [ ] == ! [ ] 和 ! [ ] == [ ] 结果是什么? 为什么?
! [ ] == ! [ ] 和 ! [ ] == [ ] 结果是什么? 为什么?
47 0
C#—Main方法
今天在敲委托代理第三个例子的时候遇到了这样的问题
|
JavaScript
js 如何if( a== 1 && a == 2 && a==3)
js 如何if( a== 1 && a == 2 && a==3)
149 0
|
存储
什么时候 a == 1 && a == 2 && a == 3 为 true?
什么时候 a == 1 && a == 2 && a == 3 为 true?
137 0
什么时候 a == 1 && a == 2 && a == 3 为 true?
|
C语言 C++
你真的了解main函数吗?
你真的了解main函数吗?
300 0
你真的了解main函数吗?
_main函数 int __cdecl invoke_main(void) (?invoke_main@@YAHXZ)
_main函数 int __cdecl invoke_main(void) (?invoke_main@@YAHXZ)
|
Java
深入理解main方法
深入理解main方法
222 0
深入理解main方法