当Python解释器读取源文件时,它将执行其中找到的所有代码。
在执行代码之前,它将定义一些特殊变量。例如,如果python解释器将该模块(源文件)作为主程序运行,则它将特殊的__name__变量设置为值“ __main__”。如果从另一个模块导入该文件,则将__name__设置为模块的名称。
这样做的一个原因是,有时您编写了一个模块(.py文件),可以在其中直接执行该模块。或者,也可以将其导入并在另一个模块中使用。通过进行主要检查,您可以使代码仅在要将模块作为程序运行时执行,而在有人只想导入模块并自己调用函数时不执行。
例如,如果您有2个文件one.py和two.py,其代码如下:
一个.py:
def func(): print("func() in one.py") print("Root of one.py") if __name__ == "__main__": print("one.py is being run directly") else: print("one.py is being imported")
Two.py:
import one print("Root of two.py") one.func() if __name__ == "__main__": print("two.py is being run directly") else: print("two.py is being imported")
现在,如果您运行,
$ python one.py
您将获得输出:
Root of one.py one.py is being run directly
但是如果你运行
$ python two.py
您将获得输出:
Root of in one.py one.py is being imported Root of in two.py func() in one.py two.py is being run directly