Python 中的 main() 函数是什么?
一些编程语言有一个名为 main()
的特殊函数,它是程序文件的执行入口点。然而,Python 解释器会从文件的顶部开始依次执行每一行,没有显式的 main()
函数。
Python 提供了其他约定来定义执行入口点。其中之一是使用 main()
函数和 Python 文件的 __name__ 属性。
Python 中的 __name__ 是什么?
__name__ 变量是一个特殊的内置 Python 变量,它显示当前模块的名称。
它根据我们执行 Python 文件的位置具有不同的值。让我们看一个例子。
将 Python 文件作为脚本运行
假设我们有一个名为 helloworld.py 的 Python 文件,内容如下
print(__name__)
如果我们从命令行运行 helloworld.py,那么它将作为 Python 脚本运行。我们可以使用以下命令运行 Python 程序
$ python helloworld.py
当我们将程序作为脚本运行时,变量 __name__ 的值被设置为 __main__。因此,以下程序的输出将是
__main__
将 Python 文件作为模块运行
我们还可以将 Python 文件作为模块运行。为此,我们必须将此文件导入到另一个 Python 程序中。让我们看一个例子。
假设我们有一个名为 main.py 的 Python 文件,它与 heloworld.py 文件位于同一目录中。它包含以下内容
import helloworld
当我们运行此文件时,我们将得到以下输出
helloworld
在这里,我们可以看到导入模块也会运行模块文件中的所有代码。
但是,我们可以看到程序显示的是模块的名称,即 helloworld,而不是 __main__。
这是因为,在将 Python 文件作为模块运行的上下文中,模块本身的名称被分配给 __name__ 变量。
将 if 条件与 __name__ 结合使用
既然我们已经了解了 __name__ 变量是如何被赋值的,我们就可以使用 if
条件语句在不同的上下文中以不同的方式运行同一个 Python 文件。
让我们看一个例子。
假设我们将 helloworld.py 文件的内容更改为以下内容
def main():
print("Hello World")
if __name__=="__main__":
main()
现在,当我们通过命令行将其作为脚本运行时,输出将是
Hello World
但是,当我们通过在 main.py 文件中导入它来将其作为模块运行时,由于没有调用 main()
函数,因此不显示任何输出。
在这里,我们在 helloworld.py 文件中创建了一个自定义的 main()
函数。它仅在程序作为独立脚本运行而不是作为导入模块运行时执行。
这是在 Python 中显式定义 main()
函数的标准方法。它是 Python 文件的 __name__ 变量最流行的用例之一。
另请阅读