在Python中的_name_ _main_

在Python中的_name_ _main_

main()函数 在使用C系列语言(如CC++Java、C#等)开发的程序中是必需的,用于指定程序应该从哪里开始执行。

然而,因为 Python是一种基于解释器的语言 可以在交互式shell中使用,它没有主()方法。可以在 .py扩展的Python程序文件中找到多个语句 。Python程序文件的第一条语句是执行开始的地方。

Python解释器在运行代码之前会分析源文件并定义一些特殊变量/全局变量。如果该模块(源文件)作为主应用程序 运行时,Python解释器将特殊变量__name__设置为值”__main__ 。如果同一文件从另一个模块中提取,则__name__将设置为 模块的名称 。全局变量 __name__ 接受模块名作为值。

包含 Python中的定义和语句的文件 被称为模块。带有 .py 扩展名的模块成为文件名。

示例:

# Python program to demonstrate the execution of
# main directly
print ("Executed Always")

if __name__ == "__main__":
    print ("It is executed when it's invoked directly")
else:
    print ("It is Executed when it's imported")

输出:

Executed Always
It is executed when it's invoked directly

解释:

这整个代码块 在0级缩进的[块1]被运行 。虽然指定的函数和类都被定义了, 但它们的代码实际上并没有执行

根据这里的指示,Python将直接使用 __main__变量 。因此,只有在该模块作为您的 程序入口点时,才会执行此 [块2] 的代码

因此,通过检查 __name__变量 ,您可以确定脚本是手动执行的, 还是被另一个程序导入的

如果脚本被另一个模块导入 ,此时模块的 名称将为__name__

为什么需要这个

通常在我们想要 直接执行一个函数时 需要它。例如, 我们正在创建一个脚本 ,它将被用作一个模块:

示例:

# Python program to demonstrate the execution of a
# function directly
def this_function():
    print ("I'm inside this function")

# We can test this function by calling it.
this_function()

输出:

I'm inside this function

使用_name_ _main_的优势

  • 每个Python模块都有一个指定的__name__,如果为'__main__',则表示该模块是由用户独立执行的,让我们可以采取必要的行动。
  • 如果在另一个脚本中以模块的形式获取此脚本,则__name__被赋值为脚本/模块的名称。
  • Python文件可以作为独立应用程序或可重用模块来使用。
  • 如果文件是直接执行的,而没有被导入,则使用语句"if __name__ == "main""来运行一些代码。

为什么设计成这样

自然地,我们可能会考虑设计背后的原因。嗯,有时候我们希望创建一个既可以用作其他程序和/或模块的模块,又可以作为主应用程序使用的.py文件。

这种行为有助于更快地测试和改进我们的代码。因为它使我们能够在脚本模式下直接运行单元测试,也有助于调试。

此外,只需设置一个变量即可直接在Python中启动一个模块,这是优雅的。

结论

__name__变量有一个特别优秀的用例,无论你需要一个可以被其他模块导入或作为主要程序启动的文件。当导入模块时,我们可以使用if __name__ == "__main__"块来允许或禁止运行特定的代码段。

当Python解释器阅读任何文件时,__name__变量被设置为导入的模块的名称或__main__(如果模块正在被启动)。当阅读文件时,所有顶层代码都会被执行,但函数和类不会被执行(它们只会被导入)。

通过使用顶层作用域__main__和特殊变量__name__,提高了代码的可重用性。Python脚本文件可以在命令行或终端上从命令行或终端运行,无论是独立运行还是作为模块导入运行。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程