这样做做什么,为什么应该包括:if
语句?
if __name__ == "__main__":
print("Hello, World!")
如果你试图结束一个问题 如果你想要结束一个问题 在那里有人应该应该 使用这个学说,而不是,是不是, 考虑关闭作为 重复的为什么Python在我进口时 运行我的模块? 我该如何阻止它?。而对于某些问题,如果有人只是没有调用任何函数,或者错误地期望指定函数main
自动用作切入点,使用当我启动 Python 脚本时, 主函数为何不运行? 脚本从哪里开始运行 ?.
只有你需要知道的事实
这个问题的其他答案太长了。 实际的机械非常简单,只有两个基本事实:
纯 Python 模块总是用变量创建__name__
设置为字符串"__main__"
.
导入模块的副作用是更改__name__
基本文件名的变量.py
扩展号。
如何使用这一信息
人们写作__name__ == '__main__'
要测试模块是否已经导入 。
通常情况下,有些代码在进口时不应运行:测试代码、一次性使用代码、指令前端或网络服务器前端。
其理念是,运行模块的人直接希望这些动作发生, 但是输入模块的人只想要直接访问功能、类别和变量。
正如你从其他答案中可以看到的,人们似乎能够无休止地谈论这个话题,但它确实很简单,很容易掌握。覆盖此(笑声) (掌声) (掌声) 值两分钟的读数。不要让其他答案把你淹没在解释过度的阴影中。(掌声) (掌声)
创建以下两个文件 :
# a.py
import b
# b.py
print("__name__ equals " + __name__)
if __name__ == '__main__':
print("if-statement was executed")
现在每个文件都单独运行 。
运行中python a.py
:
$ python a.py
__name__ equals b
何时a.py
执行时,它导入模块b
。这导致所有代码都在里面b
要运行。 Python 设置globals()['__name__']
和在b
模块的模块到模块名称,b
.
运行中python b.py
:
$ python b.py
__name__ equals __main__
if-statement was executed
仅在文件b.py
已执行, Python 设置globals()['__name__']
在此文件中的文件中"__main__"
因此,if
用于True
这一次。
所有答案都大致解释了它的功能。但我将举一个例子来说明它的用法,这可能有助于进一步澄清这个概念。
假设你有两个Python文件,A.py和B.py。a.py
进口进口进口b.py
。我们运行a.py
文件, 在哪里import b.py
代码先执行。在其余a.py
代码运行,文件中的代码b.py
必须完全运行。
在b.py 代码中,有一些代码是那个文件的独有代码b.py
我们不想要任何其他文件(不包括b.py
已导入 b. py 文件来运行 。
这就是这行代码检查。如果它是主文件(即,b.py
运行代码,在这种情况下它不是代码 (a.py
是正在运行的主文件),然后只有代码才能被执行。
缩略Python 主函数是一个程序的起始点。当程序运行时, Python 口译员会按顺序运行代码。主要函数只有在作为 Python 程序运行时才执行...
def main():
print("I am in the function")
print("I am out of the function")
当运行脚本显示时 :
I am out of the function
而不是代码"我是在函数"。
这是因为我们没有宣布调用功能“if_name”主要".
使用时使用:
def main():
print("I am in the function")
if __name__ == "__main__":
main()
print("I am out of the function")
输出等于
I am in the function
I am out of the function
在皮顿if__name__== "__main__"
允许您作为可重复使用的模块或独立程序运行 Python 文件。
当 Python 口译员读取源文件时, 它会执行其中的所有代码。 当 Python 运行“ 源文件” 作为主程序时, 它会设置特殊变量__name__
要有一个值"__main__"
.
当您执行主函数时,它会读取if
用来检查__name__
等于__main__
.