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

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

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


当前回答

只有你需要知道的事实

这个问题的其他答案太长了。 实际的机械非常简单,只有两个基本事实:

  1. 纯 Python 模块总是用变量创建__name__设置为字符串"__main__".

  2. 导入模块的副作用是更改__name__基本文件名的变量.py扩展号。

如何使用这一信息

人们写作__name__ == '__main__'要测试模块是否已经导入 。

通常情况下,有些代码在进口时不应运行:测试代码、一次性使用代码、指令前端或网络服务器前端。

其理念是,运行模块的人直接希望这些动作发生, 但是输入模块的人只想要直接访问功能、类别和变量。

正如你从其他答案中可以看到的,人们似乎能够无休止地谈论这个话题,但它确实很简单,很容易掌握。覆盖此(笑声) (掌声) (掌声) 值两分钟的读数。不要让其他答案把你淹没在解释过度的阴影中。(掌声) (掌声)

其他回答

简单的说,它是一个切入点 运行文件,像main函数中C编程语言。

考虑:

print __name__

上述产出是__main__.

if __name__ == "__main__":
  print "direct method"

上述陈述属实,印有指纹“直接方法”假想他们是否将这门课 输入到另一门课上,它不会打印“直接方法”因为在进口时,它将设置__name__ equal to "first model name".

原因 原因 原因

if __name__ == "__main__":
    main()

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

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

如果 Python 口译员正在运行一个特定模块,那么__name__全局变量将拥有值"__main__":

def a():
    print("a")

def b():
    print("b")

if __name__ == "__main__":

        print ("you can see me")
        a()
else:

        print ("You can't see me")
        b()

当您运行此脚本时, 它会打印 :

you can see me
a

如果您导入此文件, 请说A要到文件的文件B,然后执行文件B时当时if __name__ == "__main__"文件中的文件A成为假假,所以它指纹:

You can't see me
b

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

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

嗯,我进口了它们, 但是在文件的结尾,我放__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'>