python “__name__”到底是什么东西

发布时间:2023-03-27 08:00

背景

大家经常在 python 的脚本文件中,会遇到这样的代码:if __name__ == \"__main__\":,那么有没有人知道这到底是干嘛的。今天就分享一下这个到底是干嘛的。

1. 直接运行

创建一个文件夹code0516。然后在这个文件夹下创建一个名叫one.py文件,并且写入下面的代码:

# file one.py
def func():   # Line 1.1
    print(\"func() in ONE.py\")


print(\"top-level in ONE.py\")   # line 1.2

if __name__ == \"__main__\":
    print(\"ONE.py is being run directly\") # line 1.3
else:
    print(f\"ONE.py __name__ is {__name__}\")   # line 1.4
    print(\"ONE.py is being imported into another module\")  # line 1.5

然后运行:python one.py,运行结果如下:

\"python

观察上面的结果可以发现,代码中的 # line 1.2# line 1.3部分都运行了,别的都没运行。

为什么?这里给到一个解释:

  1. 要知道,我们使用python one.py命令运行one.py文件,叫直接运行。(感觉说了就像是没说一样)。
  2. __name__其实是 python 的内置的一个变量。
  3. 当直接运行脚本的时候,__name__就成了__main__
  4. 为什么会这样设置?那就是这样设置的,没有为什么。

2. 导入运行

接下来在文件夹code0516下,创建另外一个叫two.py文件。并且写入下面的代码:

# file two.py
import one

print(\"top-level in TWO.py\")    # line 2.1
one.func()   # line 2.2

if __name__ == \"__main__\":
    print(\"TWO.py is being run directly\")  # line 2.3
else:
    print(\"TWO.py is being imported into another module\") # line 2.4

然后运行:python two.py,运行结果如下:

\"python

观察上面的运行结果可以发现:# line 1.2# line 1.4# line 1.5# line 2.1# line 1.1# line 2.2# line 2.3部分都运行了,别的都没运行。

我们来对two.py文件运行的结果逐行分析一下,但是我们这里有下面几个要求要注意:

  1. import one这就是代表 导入运行(就是导入这个文件,反正不是直接运行了)。
  2. 当脚本被导入的时候(像是import one这样的形式的),__name__就成了脚本本身的名字了,这里的脚本名字为one,因此这里的__name__也就变成了one

two.py直接运行分析

运行结果 结果来源于哪一行 为什么会运行这一行 (two.py)
top-level in ONE.py # line 1.2 import one
ONE.py __name__ is one # line 1.4 import one
ONE.py is being imported into another module # line 1.5 import one
top-level in TWO.py # line 2.1 print(\"top-level in TWO.py\")
func() in ONE.py # Line 1.1 one.func()
TWO.py is being run directly # line 2.3 print(\"TWO.py is being run directly\")

总结

  1. 使用python one.py命令运行one.py文件,叫直接运行。(感觉说了就像是没说一样)。
  2. __name__其实是 python 的内置的一个变量。
  3. 当直接运行脚本的时候,__name__就成了__main__
  4. 当脚本被导入的时候(像是import one这样的形式的),__name__就成了脚本本身的名字了,这里的脚本名字为one,因此这里的__name__也就变成了one

参考链接:

  1. https://zhuanlan.zhihu.com/p/57309137
  2. https://stackoverflow.com/questions/419163/what-does-if-name-main-do

阅读更多

list

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号