这样做做什么,为什么应该包括:if语句?

if __name__ == "__main__":
    print("Hello, World!")

如果你试图结束一个问题 如果你想要结束一个问题 在那里有人应该应该 使用这个学说,而不是,是不是, 考虑关闭作为 重复的为什么Python在我进口时 运行我的模块? 我该如何阻止它?。而对于某些问题,如果有人只是没有调用任何函数,或者错误地期望指定函数main自动用作切入点,使用当我启动 Python 脚本时, 主函数为何不运行? 脚本从哪里开始运行 ?.


当前回答

下代码的代码if __name__ == '__main__':仅仅如果将模块作为脚本引用,则执行该模块。

例如,考虑以下模块my_test_module.py:

# my_test_module.py

print('This is going to be printed out, no matter what')

if __name__ == '__main__':
    print('This is going to be printed out, only if user invokes the module as a script')

第一种可能性:进口my_test_module.py在另一个模块中

# main.py

import my_test_module

if __name__ == '__main__':
    print('Hello from main.py')

如果你现在祈祷main.py:

python main.py

>> 'This is going to be printed out, no matter what'
>> 'Hello from main.py'

请注意,只有最高层print()语中的语中my_test_module执行。


第二种可能性:my_test_module.py作为脚本

现在,如果你现在跑my_test_module.py作为 Python 脚本, 两者print()将执行语句:

python my_test_module.py

>>> 'This is going to be printed out, no matter what'
>>> 'This is going to be printed out, only if user invokes the module as a script'

更全面的解释,可读作:什么是什么东西if __name__ == '__main__'在 Python 中做.

其他回答

简言之:

您所看到的代码下面的代码if __name__ == "__main__":只有当您的 Python 文件被执行时才会被调用 。python example1.py

但是,如果您想要导入您的 Python 文件example1.py以模块的形式使用另一个 Python 文件, 例如example2.py下的代码if __name__ == "__main__":将不会运行或产生任何效果。

所有答案都大致解释了它的功能。但我将举一个例子来说明它的用法,这可能有助于进一步澄清这个概念。

假设你有两个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是正在运行的主文件),然后只有代码才能被执行。

原因 原因 原因

if __name__ == "__main__":
    main()

主要是为了避免导入锁定可能产生的问题引起的问题直接导入代码. 你想要main()如果您的文件被直接引用( 即__name__ == "__main__"如果您的代码是导入的, 则进口者必须从真正的主模块输入您的代码, 以避免进口锁出现问题 。

一个副作用是,您自动签署一个支持多个切入点的方法。您可以使用main()作为切入点,但你没有 不得不时段setup.py预计预计预计预计main(),其他工具使用其他切入点。例如,将文件作为gunicorn进程,您定义app()函数代替main()。 和setup.py, gunicorn输入密码时不要做任何事情(因为进口锁问题)。

用于从命令行调用 Python 文件。 它通常用于调用“ main ()) ” 函数或执行其他合适的启动代码, 比如, 处理命令行参数 。

也可以以几种方式写成。

def some_function_for_instance_main():
    dosomething()


__name__ == '__main__' and some_function_for_instance_main()

我不是说你应该用这个来做生产代码, 但是它可以说明,没有什么"神奇"if __name__ == '__main__'.

这只是援引 Python 文件中主要功能的常规 。

我认为最好打破答案的深度 和简单的话:

__name__: Python 中的每个模块都有一个特殊属性__name__。它是返回模块名称的内置变量。

__main__:与其他编程语言一样,Python也有执行的切入点,即主切入点。'__main__' 是顶层代码执行范围的名称。基本上,您有两种方法使用 Python 模块:直接作为脚本运行,或导入。当一个模块作为脚本运行时,它的脚本__name__设置为__main__.

因此,《公约》和《京都议定书》的__name__属性设置为__main__当模块作为主程序运行时,该模块作为主程序运行。否则__name__设置以包含模块的名称。