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

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

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


当前回答

您可以将文件作为脚本脚本脚本和(或)可导入可导入模块.

vibbo.py (一个称为模块的模块)fibo)

# Other modules can IMPORT this MODULE to use the function fib
def fib(n):    # write Fibonacci series up to n
    a, b = 0, 1
    while b < n:
        print(b, end=' ')
        a, b = b, a+b
    print()

# This allows the file to be used as a SCRIPT
if __name__ == "__main__":
    import sys
    fib(int(sys.argv[1]))

参考:https://docs.python.org/3.5/tutorial/modules.html

其他回答

if __name__ == "__main__"是在脚本从命令行运行时运行的部分,使用类似命令python myscript.py.

什么是if __name__ == "__main__":是吗?

概述基本内容:

  • 全局变量,__name__,在您的程序程序输入点的模块中,是'__main__'否则,它就是您导入模块的名称 。

  • 所以,代码在if块只当模块是程序输入点时才会运行。

  • 它允许模块中的代码可被其他模块导入,而不执行进口时的代码块。


为什么我们需要这个?

制定和测试您的守则

说你正在写一个Python脚本 设计成一个模块:

def do_important():
    """This function does something very important"""

你,你,你能够将函数的调用点添加到底部以测试模块 :

do_important()

并运行它,它有类似的东西:

~$ python important.py

问题

但是,如果您想要将模块导入到另一个脚本:

import important

进口时do_important函数将被调用, 所以您可能会评论 您的函数调用,do_important(),在底部。 ,在底部。

# do_important() # I must remember to uncomment to execute this!

然后你必须记住,你是否已经评论了自己的测试功能调用。 而这种额外的复杂性 将意味着你可能会忘记, 让你的发展进程更加麻烦。

更好的方法

缩略__name__变量指向命名空间, Python 解释器此时恰好在哪里。

在导入模块中,它是该模块的名称。

但在主模块(或互动的 Python 会话, 即口译员的读、 Eval、 打印圈或 REPL) 内, 您正在运行来自它的一切"__main__".

如果您在执行前检查 :

if __name__ == "__main__":
    do_important()

有了以上内容, 您的代码只有在运行为主模块时才会执行( 或者故意从其它脚本中调用它 ) 。

更好的办法

不过有种共音法可以改进

如果我们想从模块之外运行这个业务流程呢?

如果我们把代码放进去, 我们想在开发过程中练习, 在这样的功能中进行测试, 然后核对'__main__'紧接其后:

def main():
    """business logic for when running this module as the primary one!"""
    setup()
    foo = do_important()
    bar = do_even_more_important(foo)
    for baz in bar:
        do_super_important(baz)
    teardown()

# Here's our payoff idiom!
if __name__ == '__main__':
    main()

我们现在的模块末端有一个最终功能,如果我们将模块作为主模块运行,该功能将运行。

它将允许模块及其功能和类别输入到其他脚本,而不运行main函数, 并允许模块( 及其函数和类) 运行时调用该模块( 及其函数和类) 。'__main__'模块,即

import important
important.main()

在Python文件中,也可以找到这种语言,作为解释。__main__模块。案文规定:

本模块代表了口译员主要程序执行范围(否则是匿名的)——从标准输入、脚本文件或交互式提示读取的命令。正是在这个环境中,特殊“有条件脚本”的阶梯导致脚本运行:

if __name__ == '__main__':
    main()

if __name__ == "__main__":基本上是顶层的脚本环境, 它指定了翻译( “ 我最优先首先执行 ” ) 。

'__main__'是顶层代码执行范围的名称。模块的__name__设置为等于'__main__'从标准输入、脚本或交互式提示读取。

if __name__ == "__main__":
    # Execute only if run as a script
    main()

缩略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__.

原因 原因 原因

if __name__ == "__main__":
    main()

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

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