📌  相关文章
📜  if __name__ == “__main__”: 做什么?

📅  最后修改于: 2022-05-13 01:54:38.950000             🧑  作者: Mango

if __name__ == “__main__”: 做什么?

在执行代码之前, Python解释器读取源文件并定义一些特殊变量/全局变量。
如果Python解释器将该模块(源文件)作为主程序运行,它会将特殊的 __name__ 变量设置为具有值“__main__” 。如果此文件是从另一个模块导入的,则 __name__ 将设置为模块的名称。模块的名称可用作 __name__ 全局变量的值。

模块是包含Python定义和语句的文件。文件名是后缀.py的模块名。

当我们将文件作为命令执行到Python解释器时,

python script.py
Python3
# Python program to execute
# main directly
print ("Always executed")
 
if __name__ == "__main__":
    print ("Executed when invoked directly")
else:
    print ("Executed when imported")


Python3
# Python program to execute
# function directly
def my_function():
    print ("I am inside function")
 
# We can test function by calling it.
my_function()


Python3
# Python program to use
# main for function call.
if __name__ == "__main__":
    my_function()
 
import myscript
 
myscript.my_function()


  • 所有处于缩进级别 0 [Block 1] 的代码都会被执行。定义的函数和类已经定义好了,但是它们的代码都没有运行。
  • 在这里,当我们直接执行 script.py 时,__name__ 变量将是__main__ 。因此, if block[Block 2] 中的代码仅在该模块是您的程序的入口点时才会运行。
  • 因此,您可以通过测试 __name__ 变量来测试您的脚本是直接运行还是被其他东西导入。
  • 如果脚本当时被其他模块导入, __name__将是模块名称。

为什么我们需要它?

例如,我们正在开发旨在用作模块的脚本:

Python3

# Python program to execute
# function directly
def my_function():
    print ("I am inside function")
 
# We can test function by calling it.
my_function()

现在,如果我们想通过导入来使用该模块,我们必须注释掉我们的调用。而不是这种方法,最好的方法是使用以下代码:

Python3

# Python program to use
# main for function call.
if __name__ == "__main__":
    my_function()
 
import myscript
 
myscript.my_function()

好处 :

  1. 每个Python模块都定义了它的 __name__,如果这是 '__main__',则意味着该模块正在由用户独立运行,我们可以执行相应的适当操作。
  2. 如果将此脚本作为模块导入另一个脚本中,则 __name__ 将设置为脚本/模块的名称。
  3. Python文件既可以作为可重用模块,也可以作为独立程序。
  4. if __name__ == “main”:当文件直接运行而不是导入时才用于执行某些代码。