这样做做什么,为什么应该包括: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
所有答案都大致解释了它的功能。但我将举一个例子来说明它的用法,这可能有助于进一步澄清这个概念。
假设你有两个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
是正在运行的主文件),然后只有代码才能被执行。
您可以查看特殊变量__name__
使用此简单示例 :
创建创建文件1. py
if __name__ == "__main__":
print("file1 is being run directly")
else:
print("file1 is being imported")
创建 *file2。平平
import file1 as f1
print("__name__ from file1: {}".format(f1.__name__))
print("__name__ from file2: {}".format(__name__))
if __name__ == "__main__":
print("file2 is being run directly")
else:
print("file2 is being imported")
执行文件2. py
Output:
file1 is being imported
__name__ from file1: file1
__name__ from file2: __main__
file2 is being run directly
用于从命令行调用 Python 文件。 它通常用于调用“ main ()) ” 函数或执行其他合适的启动代码, 比如, 处理命令行参数 。
也可以以几种方式写成。
def some_function_for_instance_main():
dosomething()
__name__ == '__main__' and some_function_for_instance_main()
我不是说你应该用这个来做生产代码, 但是它可以说明,没有什么"神奇"if __name__ == '__main__'
.
这只是援引 Python 文件中主要功能的常规 。
如果 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