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