发布时间:2023-03-27 08:00
大家经常在 python 的脚本文件中,会遇到这样的代码:if __name__ == \"__main__\":
,那么有没有人知道这到底是干嘛的。今天就分享一下这个到底是干嘛的。
创建一个文件夹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
,运行结果如下:
观察上面的结果可以发现,代码中的 # line 1.2
、# line 1.3
部分都运行了,别的都没运行。
python one.py
命令运行one.py
文件,叫直接运行。(感觉说了就像是没说一样)。__name__
其实是 python 的内置的一个变量。__name__
就成了__main__
。接下来在文件夹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
,运行结果如下:
观察上面的运行结果可以发现:# line 1.2
、 # line 1.4
、# line 1.5
、# line 2.1
、# line 1.1
、# line 2.2
、# line 2.3
部分都运行了,别的都没运行。
我们来对two.py
文件运行的结果逐行分析一下,但是我们这里有下面几个要求要注意:
import one
这就是代表 导入运行
(就是导入这个文件,反正不是直接运行了)。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\") |
python one.py
命令运行one.py
文件,叫直接运行。(感觉说了就像是没说一样)。__name__
其实是 python 的内置的一个变量。__name__
就成了__main__
。import one
这样的形式的),__name__
就成了脚本本身的名字了
,这里的脚本名字为one
,因此这里的__name__
也就变成了one
。list
FigDraw 7. SCI 文章绘图之折线图 (Lineplot)
初识C语言-关键字(typedef、static),#define定义变量和宏,指针,结构体
ArcGIS Notebook Server 10.9.1 Linux版本安装示例
【JS 构造|原型|原型链|继承(圣杯模式)|ES6类语法】下篇
Python pandas DataFrame基础运算及空值填充详解
【Redis系列7】Redis高级特性之发布/订阅和Lua脚本执行原理分析
P2181 对角线和P1030 [NOIP2001 普及组] 求先序排列