我有以下三个python文件:
在python中每一个py文件都是一个模块,不管里面写了什么。
现在main.py调用test1模块,那么导入的方式可以是:
test1和main两个文件的内容分别是:
test1.py
def test():
print('this is test1 test')
def test1():
print('this is test1 test1')
test()
main.py
import test1
test1.test()
此时执行main.py
这样就导入了test1.py模块了。
假如我为了在test1.py中测试test函数,代码如下:
def test():
print('this is test1 test')
def test1():
print('this is test1 test1')
test()
再去执行main.py,看到结果:
出现了两条打印记录,换句话说就是test函数被执行了两次,这里的原因是当一个模块被导入时,实际上是执行了这个模块一次:
那么为了测试如何避免这种情况,在执行main时只打印一条数据呢,此时就用到"__name__"这个特殊变量了。
这个变量在本文件中值为“__main__”,如果被导入到别的模块中时,那么这个值就变成了这个模块的名字了,如:
def test():
print('this is test1 test')
def test1():
print('this is test1 test1')
test()
print('__name__ : %s'%(__name__))
输出为:
此时再执行main,py
显而易见,值已经不一样了,那么通过这个特性只要修改test1.py如下代码就可以:
def test():
print('this is test1 test')
def test1():
print('this is test1 test1')
if __name__ == '__main__':
test()
再次执行main.py:
问题就解决了。
需要注意的是当导入方式为“*”时,如果存在同名的函数或者方法,那么最后一个导入的会覆盖前面的,test2.py也有函数
test,
def test():
print('this is test2 test')
main.py修改如下:
from test1 import *
from test2 import *
test()
执行如下:
所以需要注意。