相信很多人都去阅读过别人的代码(注:通常通过阅读比你牛的人写的代码,会让你的技术水平飞速提高),在阅读代码时,你会发现很多代码中都有 if __name__==’__main__‘ 这么一行代码语句,但是不知道有什么用?
因此下面我来详细的解答一下:
先举个例子,一般写完代码要先测试一下:
1 | # testone.py |
单独运行这个模块是没问题的:
1 | >>> |
但是,如果在另一个文件(testtwo.py)导入后再调用:
1 | #testtwo.py |
就会出现问题:
1 | >>> |
python 把模块testone.py中的测试函数也一块给执行了,而这并不是想要的结果。
避免这种情况的关键在于:让python知道该模块是作为程序运行还是导入到其他模块中。为了实现这一点,需要使用模块的name属性:
1 | print(__name__) |
在作为程序运行的时候,name属性的值是’__main__‘;而作为模块导入的时候,这个值就是该模块的名字了。因此,也就不难理解if name==’main‘这句代码的意思了。
因此,我们改一下testone.py的代码:
1 | #testone.py |
然后我们再来运行一下testtwo.py文件
1 | >>> |
得到了我们想要的结果了。
其实除了上述方案,我们还有另一种方法
(from 模块名 import 函数名):
我们可已通过以下修改来实现:
1 | #testtwo.py |
运行一下testtwo.py文件,得到:
1 | >>> |
这种方法可以直接导入模块中的需要的函数,来进行操作。
如果函数多的话还有可以通过使用通配符星号(*)来导入模块中所有的函数。
from 模块名 import *