Python中的if __name__ == "__main__"是什么意思?
在Python中,你会经常看到以下这行代码:
if __name__ == "__main__":
print("Hello, World!")
虽然你可能以前见过这个代码,甚至使用过几次,但可能不清楚它的作用和工作原理。让我们考虑以下设置 - 两个脚本,script1.py
和script2.py
。script2.py
导入script1.py
并调用其中的一个函数。
```py [script1.py] def do_stuff: print('Doing stuff')
do_stuff()
```py [script2.py]
from script1 import do_stuff
do_stuff()
你认为当你运行这两个脚本时会发生什么?让我们看看。
$ python script1.py
# 输出:Doing stuff
$ python script2.py
# 日志:正在做一些事情
# 日志:正在做一些事情
正如你所看到的,当我们运行script2.py
时,函数do_stuff
被调用了两次。这是因为当我们导入一个模块时,Python会执行模块中的所有代码。所以,当我们在script2.py
中导入script1.py
时,函数do_stuff
被调用了一次。然后,当我们再次调用do_stuff
时,它被调用了第二次。
我们如何解决这个问题呢?通过在script1.py
中添加if __name__ == "__main__"
的检查。这个指令检查脚本是被直接运行还是被导入。如果是被直接运行,那么if
块中的代码会被执行,否则不会执行。
```py [script1.py] def do_stuff: print('正在做一些事情')
if name == "main": do_stuff()
现在,当我们直接运行`script1.py`时,函数`do_stuff`只会被调用一次。当我们在`script2.py`中导入`script1.py`时,函数`do_stuff`不会被调用。所以,当我们在`script2.py`中调用`do_stuff`时,它只会被调用一次。
```sh
$ python script1.py
# 日志:正在做一些事情
$ python script2.py
# 日志:正在做一些事情