Python中的if __name__ == “__main__” 是什么意思?

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__的值是__main__

让我们尝试导入Python模块,以查看分配给模块的__name__变量的值 –

>>> import random
>>> random.__name__
'random'
Python

因此,在导入random模块后,我们可以看到__name__的值是“random”,这基本上是它的名称。

Python name变量值

创建以下代码并将其放入文件__name__ main.py中 –

print(" __name__ value is {}".format(__name__))
Python

一个单独的打印命令,使用字符串格式化方法输出__name__的值。

当我们通过引用Python文件直接运行代码时,__name__的值为__main__

$ python __name__main.py 
The value of __name__ is __main__
Python

相反,如果我们通过Python shell导入模块,__name__的值就是__name__ main –

>>> import _name_main
__name__ value is __name__main
Python

因此,name的值取决于我们的Python代码如何执行。

__name__的示例

要在Python中使用条件if __name__==“__main__”,可以创建如下所示的Python程序,通过它调用三个不同的函数 –

def step1():
   print("执行第一步...")
def step2():
   print("执行第二步...")
def step3():
   print("执行第三步...")
step1()
step2()
step3()
Python

输出结果

以下是以上代码的输出结果 –

执行第一步...
执行第二步...
执行第三步...
Python

现在假设另一个Python应用程序需要使用step1函数()。我们需要导入文件作为模块来实现。

当我们这样做时会发生以下情况 –

>>> import _name_main
执行第一步...
执行第二步...
执行第三步...
>>> _name_main.step1()
执行第一步...
Python

在导入模块之后,可以调用step1()函数。问题在于,导入模块时会自动执行以下三行代码 −

step1()
step2()
step3()
Python

那么问题是,如何防止这种情况的发生?

当模块被导入时检查__name__是否等于__main__

我们可以验证__name__的值是否等于__main__来避免前一节中所看到的行为。

这样,仅在直接调用该Python文件时才运行if条件中的代码,而不是在导入为模块时运行。

示例

现在,程序如下 −

def step1():
   print("执行第一步...")
def step2():
   print("执行第二步...")
def step3():
   print("执行第三步...")
if __name__ == "__main__":
   step1()
   step2()
   step3()
Python

输出

让我们检查直接调用Python程序是否仍会调用三个函数

执行第一步...
执行第二步...
执行第三步...
Python

此外,当我们将其导入为模块时,不会执行这三个函数 7minus;

>>> import _name_main
>>> _name_main.step1()
执行第一步...
Python

这次要好得多!

考虑到_name_main模块具有数百个函数,而并非您要导入的所有函数。

如何简单地导入step1()函数?

应使用以下语法 −

>>> from _name_main import step1
>>> step1()
执行step1...
>>> step2()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'step2' is not defined
Python

如您所见,在此示例中,我们只导入了函数step1的成功版本。

尝试运行step2()时将出现NameError: name’step2′ is not defined。

Python中的主要方法

在Java或C等语言中,主要方法的概念非常普遍,并指定程序执行的起始点。

main() 函数在if语句内执行并验证__name__变量的值。

为了获得特定结果,会在 main() 函数中调用多个函数。在我们的情况下,main函数会调用三个子函数 − 示例

现在,程序如下 −

def step1():
   print("执行第一步...")
def step2():
   print("执行第二步...")
def step3():
   print("执行第三步...")
def main():
   step1()
   step2()
   step3()
if __name__ == "__main__":
   main()
Python

输出

我们现在调用该程序 −

执行第一步...
执行第二步...
执行第三步...
Python

在上述代码中,main()函数是程序的主要逻辑,并且在if语句中被执行。在该例中,我们仍然具有与上面例子中相同的模块名,但我们通过添加main()函数来实现分离”真正”代码和模块导入时执行的代码。

def step1():
   print("执行第一步...")
def step2():
   print("执行第二步...")
def step3():
   print("执行第三步...")
def main():
   step1()
   step2()
   step3()
if __name__ == "__main__":
   main()
Python

输出

执行第一步...
执行第二步...
执行第三步...
Python

由于main的概念也被其他开发人员广泛知晓,将函数命名为main()只是一种标准命名约定,以提高程序的可读性。

实际上,我们可以把main函数改名为其他名字。

在继续本文之前,请验证我们修改后的代码在以下两种情况下都能正常工作:

  • 代码的直接执行
  • 模块的导入

Python中的 namemain和参数

我们可以在判定变量__name__是否等于 __main__的if条件语句中直接处理传递给Python程序的任何参数。

我们可以使用 sys模块 来处理传递给程序的参数。

  • 导入sys模块。

  • 创建一个名为main()的函数,该函数只接受一个参数。这个参数由一个包含程序运行时提供的参数的字符串列表组成。

  • 在if语句中将sys.argv提供给main()函数。

例子

import sys
def main(args):
   print(args)
if __name__ == "__main__":
   main(sys.argv)
Python

输出

以上执行程序的输出如下:

['main.py']
Python

如你所见,Python程序的第一个参数是.py文件的名称本身。

让我们修改main方法,使其打印args变量的类型。

def main(args):
   print(type(args))
   print(args)
Python

这证明args是一个列表 –

$ python arguments.py arg1 arg2
<class 'list'>
['arguments.py', 'arg1', 'arg2']
Python

除了提供参数,我们还可以解包我们的程序需要的参数,将程序名称排除在外 –

导入 sys
定义 main(c, d):
   返回 int(c) * int(d)
如果 __name__ == "__main__":
   arg1, arg2 = sys.argv[1:3]
   print(main(arg1, arg2))
Python

这是执行程序和接收到的结果的步骤−

$ python product.py 4 5
20
Python

命令行中给出的两个数字由此代码使用切片运算符获取。 然后,仍然以字符串格式将这两个数字提供给main()方法。

将两个数字转换为整数的结果由main函数返回。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册