在Python中 if name ==“ main”是什么

时间:2020-03-21 11:48:50  来源:igfitidea点击:

Python是目前正在发展的高级语言之一。
该主张并非没有证据。
在GitHub发布的最新语言流行度列表中,Python排名第一。
实际上,它是第二受欢迎的语言(目前由JavaScript排名第一)。
python的语法非常简单明了,而且很容易理解,没有到处都有令人费解的花括号。

Python受欢迎的另一个原因是它被用作服务器端脚本语言。
系统管理员可以利用Python来自动完成无聊的例行工作。
现成的模块几乎可用于所有功能,因此如今用Python轻松实现某些功能非常容易。

在本文中,我们将讨论新python用户在程序中遇到的流行语句之一。
它的下面。

if __name__ ==“ __main__”:

我们将在程序中讨论上述语句的用例和原因。

使编程变得容易且吸引人的主要因素之一是“模块”。
Python中的模块不过是可以包含(导入)在其他程序中的程序,因此可以在编写的程序中重用模块中定义的功能和操作。

为了进一步理解它,让我们编写一个小程序,并将其作为模块导入另一个程序中。
下面是一个带有伪函数的小程序,可以打印某些内容。
我们将此程序作为模块导入到另一个程序中。

#cat myfirstmodule.py
def printsomething():
    print "Hello!. Welcome!"

让我们编写另一个虚拟程序,将其导入上面的程序。
请记住,上面的虚拟程序保存在名为“ myfirstmodule.py”的文件中,因此,当我们将其导入到程序中时,我们将简单地说“ import myfristmodule”。
见下文。

#cat myfirstprogram.py
import myfirstmodule
myfirstmodule.printsomething()

现在,如果我们执行myfirstprogram.py,它应该执行在“ myfirstmodule”中定义的“ printsomething”功能。
我们可以在导入了任何程序的程序中使用格式“ myfirstmodule.functioname”访问在myfirstmodule中定义的所有函数。

$python myfirstprogram.py
Hello!. Welcome!

现在让我们在名为“ myfirstmodule.py”的第一个模块中再添加一行。
见下文。

#cat myfirstmodule.py
def printsomething():
    print "Hello!. Welcome!"
printsomething()

我们只是简单地调用了printsomething函数,以查看它在myfirstmodule内是否按预期工作。
现在,让我们再次执行myfirstprogram.py。
见下文。

$python myfirstprogram.py
Hello!. Welcome!
Hello!. Welcome!

现在,我们看到两个打印语句的不期望的输出。
第一个来自我们在“ myfirstmodule.py”中添加的“ printsomething()”行,第二个来自myfirstprogram.py中的“ myfirstmodule.printsomething()”行。

这是因为,当python遇到import语句(在我们的例子中为“ import myfirstmodule”)时,它将执行该语句,以便将函数和其他属性提供给我们要其中导入的当前程序使用。
在我们的示例中,当python解释器看到“ import myfirstmodule”时,它执行了它,其中还包含我们添加的新行(printsomething())

我们在里面添加的printsomething()行只是为了测试我们的功能。
当将“ myfirstmodule”作为模块导入时,不应执行该命令。
它仅应在直接执行myfirstmodule.py时执行(即:python myfirstmodule.py)。

现在让我们在模块中再增加一行。
见下文。

#cat myfirstmodule.py
def printsomething():
    print "Hello!. Welcome!"
if __name__ == "__main__":
   printsomething()

让我们再次执行myfirstprogram.py。
它不应生成我们前面看到的两个print语句的不期望的输出。
请记住,我们根本没有触摸myfirstprogram.py。
我们仅使用魔术if语句if\ _name_ ==“ __main__”修改了myfirstmodule.py。

$python myfirstprogram.py
Hello!. Welcome!

if __name__ ==“ __main__”行:告诉程序该if语句中的代码仅应在将程序作为独立程序执行时执行。
如果将程序作为模块导入,则不会执行。

但这是如何工作的。
让我们更深入地dig掘。

让我们看看程序中的__name__是什么。
我们如何验证__name__是什么?
让我们在拥有myfirstmodule.py和myfirstprogram.py的位置启动python解释器。
只需执行命令python,即可启动Python解释器。
见下文。

$python
Python 2.7.10 (default, Jan 14 2014, 19:46:27)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

现在,让我们看看Python中__name__的值是什么。

>>>
>>> print __name__
__main__
>>>

因此,基本上……__name__ 默认情况下在python中设置为__main__的值。
但是让我们看一下导入模块,然后查看该模块内部的__name__的值。
见下文(记住,我们在python交互式解释器中,位于具有myfirstprogram.py和myfirstmodule.py的位置)。

>>>
>>> import myfirstmodule
>>> print myfirstmodule.__name__
myfirstmodule
>>>
>>>

因此,__name__ 变量现在具有“ myfirstmodule”的值。
在python中作为模块导入的任何程序都将__name__变量设置为模块的名称。
在所有其他情况下,它将是__main__的默认值。

当从另一个程序作为模块执行myfirstmodule时,__ name__的值将变为“ myfirstmodule”(即:模块的名称)。
当myfirstmodule作为独立程序执行时,__ name__将具有默认值__main__。

这是底线:每当我们需要一个程序时,都需要将该程序作为脚本/独立程序执行,并且还希望将其导入其他程序中,然后使用__name__ ==“ __main__”:

if __name__ ==“ __main__”,则需要在独立模式下执行的操作将进入if语句块中: