这是什么,为什么应该包括一个 if 声明?

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

如果你试图关闭一个问题,有人应该使用这个字符,而不是,考虑关闭作为一个复制为什么Python在我进口时运行我的模块,而我如何停止它? 问题,有人只是没有呼叫任何功能,或者错误地等待一个名为主的功能将自动作为一个输入点,使用为什么没有主()功能运行。


当前回答

简单的答案是下方写的代码,如果名称 ==“主”:如果您将其输入到另一个文件,则不会执行。

其他回答

当您互动运行Python时,本地 __name__ 变量被分配为 __main__ 的值。 同样,当您从命令行中执行一个Python 模块时,而不是将其导入到另一个模块时,其 __name__ 属性被分配为 __main__ 的值,而不是模块的实际名称。

if __name__ == '__main__':
    # Do something appropriate here, like calling a
    # main() function defined elsewhere in this module.
    main()
else:
    # Do nothing. This module has been imported by another
    # module that wants to make use of the functions,
    # classes and other useful bits it has defined.

它是特殊的,当一个Python文件从命令线被召唤时,通常用来召唤一个“主()”函数或执行其他适当的启动代码,如命令线论点处理,例如。

它可以用多种方式写出来,另一个是:

def some_function_for_instance_main():
    dosomething()


__name__ == '__main__' and some_function_for_instance_main()

我不是说你应该在生产代码中使用这一点,但它用来解释是否有“魔法”的东西。

它只是在Python文件中引用一个主要功能的条约。

假设我在维基百科上写了网页扫描的功能和课程,当然,这可能不是一个好例子。

我想在另一个程序中使用这些功能,而不重写它。

好吧,我进口它们,但在该文件的结尾我把 __name__ == '__main__'

当我们进口一个模块时,它内部的所有代码都从开始到结束,但当它达到条件时,它不运行函数、函数2等,即维基百科 __scrape__。

好吧,在全球范围内,Python __name__ 为当前程序定义为“__main__”。

当我们进口一个模块时,它被定义为我们当前程序的名称空间中的变量,而当前程序 __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')

出口

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'>

什么是 __name__?

哪里

>>> print(__name__)
__main__
>>>

此分類上一篇:file.py:

print(__name__)

结果在 __main__

主持人.py:

def somefunction():
    print(__name__)

此分類上一篇:file.py:

import somefile
somefile.somefunction()

结果在Somefile

请注意,当在包或模块中使用时, __name__ 取出文件的名称. 实际模块或包路径的路径不被提供,但有自己的 DunderAlias __file__,这允许这样做。

>>> __name__ = 'Horrify' # Change default from __main__
>>> if __name__ == 'Horrify': print(__name__)
...
>>> else: print('Not Horrify')
...
Horrify
>>>

现在回答如果 __name__ ==“__main__”:

如果是包含代码块的流量控制声明,则将执行,如果所提供的值是真实的,我们已经看到 __name__ 可以采取 __main__ 或它已从中进口的文件名。

这告诉我们,如果运行文件是主要文件(或您正在直接从翻译器运行),那么该条件必须执行。

模块

变量

也可以用 __name__ 做其他,不太常见但有用的事情,我会在这里展示一些:

if __name__ != '__main__':
    # Do some useful things 

运行一个条件,如果文件是主一个和另一个,如果它不是

if __name__ == '__main__':
    # Execute something
else:
    # Do some useful things

我认为最好在深度和简单的词语中打破答案:

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

__main__:像其他编程语言一样,Python也有一个执行输入点,即主要的“__main__”是顶级代码执行范围的名称,基本上你有两种方式使用Python模块:直接运行它作为脚本,或者进口它。

因此,当模块作为主程序运行时, __name__ 属性的值设置为 __main__. 否则 __name__ 的值设置为包含模块名称。