在本教程中,我们将学习如何使用Python程序的__name__属性在不同的上下文中动态运行它。
一些编程语言有一个称为的特殊函数main(),它是程序文件的执行点。但是,Python解释器从文件顶部开始依次运行每一行,并且没有显式main()函数。
Python提供了其他约定来定义执行点。其中之一是使用python文件的main()函数和__name__属性。
__name__变量是一个特殊的内置Python变量,它显示当前模块的名称。
根据执行Python文件的位置,它具有不同的值。让我们来看一个实例。
假设我们有一个名为helloworld.py的Python文件,其内容如下:
print(__name__)
如果我们从命令行运行helloworld.py,则它将作为Python脚本运行。我们可以使用以下命令运行Python程序:
python helloworld.py
def foo(): str="__main__" print(str); if __name__=="__main__": foo()
当我们将程序作为脚本运行时,变量的值__name__设置为__main__。因此,以下程序的输出将是:
__main__
我们还可以将Python文件作为模块运行。为此,我们必须将此文件导入另一个Python程序。让我们来看一个实例。
假设我们在与heloworld.py文件相同的目录中有一个名为main.py的Python 文件。它具有以下内容:
import helloworld
运行此文件时,将具有以下输出:
helloworld
在这里,我们可以看到导入模块也会运行模块文件中的所有代码。
但是,我们可以看到,而不是显示 __main__,程序将显示模块的名称,即 helloworld。
这是因为,在将Python文件作为模块运行的情况下,模块本身的名称已分配给__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__变量的最流行用例之一。