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

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

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


当前回答

当执行 Python 文件时, 它会创建许多特殊的变量, 例如__name__变量__name__您问题的答案是:

if __name__ == "__main__":
       # Do something

这意味着,如果所执行的文件的名称作为源文件运行,并且非模块然后它会运行里面的代码。 这可以用简单的示例来证明。 创建两个 Python 文件,foo.pysecond.py。然后在foo.py,类型如下:

if __name__ == "__main__":
       print("file is not imported")
else:
       print("file is imported")

和在second.py,类型如下:

import foo

if foo.__name__ == "__main__":
       print("file is not imported")
else:
       print("file is imported")

除此以外,如果你们要这样做,print(__name__)然后将打印__main__为什么?

因为文件以主要源代码,如果你愿意print(foo.__name__)将打印fuo fuo的默认值,因为__name__变量是文件的名称,默认是文件的默认名称,我的意思是,您也可以更改它。要做到这一点,只需去foo.py并做此操作的文件 :__name__ = "name"。然后当你运行文件,例如,

__name__ = "Hello, World!"
print(__name__)

然后产出将是:

Hello, World!

其他回答

如果此. py 文件由其它. py 文件导入, 代码在if将不执行语句。

如果此. py 运行由python this_py.py在 shell 下方的代码,或在 Windows 中双击。if将执行语句。

通常写作用于测试。

什么是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()

创建以下两个文件 :

# 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这一次。

假设我在维基百科上为网上剪贴写功能和课程。 当然,这也许不是一个好例子。

我想在另一个程序里使用这些函数 而不改写它

嗯,我进口了它们, 但是在文件的结尾,我放__name__ == '__main__'

当我们importa 模块,其中的所有代码都从开始到结束执行。但是当它达到条件时,它不会运行调乐曲 func, 复真2c2cfluc2等,这是维基百科__scrape__.

那么,在全球范围内,Python(Python)__name__定义为'__main__'用于当前程序 。

当我们import模块,它定义为当前程序和当前程序的名称空间中的变量。__name__'__main__':

文件文件文件测试.py

def func():
    # Do something
    pass

def func2():
    # Do something
    pass

print('The program name is set to ', globals()['__name__'])

if __name__=='__main__':
    # In the current program, __name__ is equal to '__main__'
    func('https://www.wikipedia.org')
    func2('https://www.wikipedia.org')
    # Or do more jobs

import test1
print('inside of current program')
print('name is current program', __name__)
print(globals()['test1'])
test1.func('another site')
test1.func2('another site')

Output

inside of test 1
name of program is set to test1
end of module
inside of current
__main__
<module 'test1' from 'C:\\users\\ir\\appdata\\local\\programs\\python\\python38\\lib\\test1.py'>

简单的答案就是代码 代码是写在如果名称名称名称名称名称 == "主要":如果您在其它文件中导入的话, 将不会执行 。