Python中的if name “main” 是什么意思?
本文解释了Python代码表达式 if __name__ == '__main__'
的含义。
Python程序使用条件if __name__ == '__main__'
仅在Python解释器直接运行程序时运行if语句中的代码。当文件的代码作为模块导入时,if语句中的代码不会被执行。
更多Python相关文章,请阅读:Python 教程
main是什么?
在Python中,__name__
表示唯一的变量。
Python有许多以双下划线开头和结尾的特殊变量。它们被称为dunder以简化书写(即Double Underscores)。在这种情况下,__name__
发音为“dunder name”。
让我们使用Python shell确定__main__
的值 –
因此,__name__
的值是__main__
。
让我们尝试导入Python模块,以查看分配给模块的__name__
变量的值 –
因此,在导入random模块后,我们可以看到__name__
的值是“random”,这基本上是它的名称。
Python name变量值
创建以下代码并将其放入文件__name__
main.py中 –
一个单独的打印命令,使用字符串格式化方法输出__name__
的值。
当我们通过引用Python文件直接运行代码时,__name__
的值为__main__
–
相反,如果我们通过Python shell导入模块,__name__
的值就是__name__
main –
因此,name的值取决于我们的Python代码如何执行。
__name__
的示例
要在Python中使用条件if __name__==“__main__”
,可以创建如下所示的Python程序,通过它调用三个不同的函数 –
输出结果
以下是以上代码的输出结果 –
现在假设另一个Python应用程序需要使用step1函数()。我们需要导入文件作为模块来实现。
当我们这样做时会发生以下情况 –
在导入模块之后,可以调用step1()函数。问题在于,导入模块时会自动执行以下三行代码 −
那么问题是,如何防止这种情况的发生?
当模块被导入时检查__name__
是否等于__main__
我们可以验证__name__
的值是否等于__main__
来避免前一节中所看到的行为。
这样,仅在直接调用该Python文件时才运行if条件中的代码,而不是在导入为模块时运行。
示例
现在,程序如下 −
输出
让我们检查直接调用Python程序是否仍会调用三个函数
此外,当我们将其导入为模块时,不会执行这三个函数 7minus;
这次要好得多!
考虑到_name_main模块具有数百个函数,而并非您要导入的所有函数。
如何简单地导入step1()函数?
应使用以下语法 −
如您所见,在此示例中,我们只导入了函数step1的成功版本。
尝试运行step2()时将出现NameError: name’step2′ is not defined。
Python中的主要方法
在Java或C等语言中,主要方法的概念非常普遍,并指定程序执行的起始点。
main() 函数在if语句内执行并验证__name__
变量的值。
为了获得特定结果,会在 main() 函数中调用多个函数。在我们的情况下,main函数会调用三个子函数 − 示例
现在,程序如下 −
输出
我们现在调用该程序 −
在上述代码中,main()函数是程序的主要逻辑,并且在if语句中被执行。在该例中,我们仍然具有与上面例子中相同的模块名,但我们通过添加main()函数来实现分离”真正”代码和模块导入时执行的代码。
输出
由于main的概念也被其他开发人员广泛知晓,将函数命名为main()只是一种标准命名约定,以提高程序的可读性。
实际上,我们可以把main函数改名为其他名字。
在继续本文之前,请验证我们修改后的代码在以下两种情况下都能正常工作:
- 代码的直接执行
- 模块的导入
Python中的 name、main和参数
我们可以在判定变量__name__
是否等于 __main__
的if条件语句中直接处理传递给Python程序的任何参数。
我们可以使用 sys模块 来处理传递给程序的参数。
- 导入sys模块。
-
创建一个名为main()的函数,该函数只接受一个参数。这个参数由一个包含程序运行时提供的参数的字符串列表组成。
-
在if语句中将sys.argv提供给main()函数。
例子
输出
以上执行程序的输出如下:
如你所见,Python程序的第一个参数是.py文件的名称本身。
让我们修改main方法,使其打印args变量的类型。
这证明args是一个列表 –
除了提供参数,我们还可以解包我们的程序需要的参数,将程序名称排除在外 –
这是执行程序和接收到的结果的步骤−
命令行中给出的两个数字由此代码使用切片运算符获取。 然后,仍然以字符串格式将这两个数字提供给main()方法。
将两个数字转换为整数的结果由main函数返回。