相信很多人都去阅读过别人的代码(注:通常通过阅读比你牛的人写的代码,会让你的技术水平飞速提高),在阅读代码时,你会发现很多代码中都有 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 方法总结 (超详细!!!)

Logo

鸿蒙生态一站式服务平台。

更多推荐