在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。
比如有这样一个文件test.py,在test.py中定义了函数add
test.py:
def add(a,b):
return a+b
那么在其他文件中就可以先import test,然后通过test.add(a,b)来调用了,当然也可以通过from test import add来引入
main.py
import test
result = test.add(11,22)
print(result)
在实际开中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发人员会自行在py文件中添加一些测试信息,例如:
test.py
def add(a,b):
return a+b
# 用来进行测试
ret = add(12,22)
print('int test.py file,,,,12+22=%d'%ret)
如果此时,在其他py文件中引入了此文件的话,想想看,测试的那段代码是否也会执行呢!
main.py
import test
result = test.add(11,22)
print(result)
运行结果:
int test.py file,,,,12+22=34
33
至此,可发现test.py中的测试代码,应该是单独执行test.py文件时才应该执行的,不应该是其他的文件中引用而执行
为了解决这个问题,python在执行一个文件时有个变量__name__
1.__name__属性可以做到,测试模块代码只在测试情况下被运行,而在被导入时不会被执行
2.__name__是python的一个内置属性,记录着一个字符串
3.如果是被其他文件导入的,__name__就是模块名
4.如果是当前执行的程序__name__是__main__
如果一个文件中有_all_[变量],那么也就意味着这个变量中的元素,会被from xxx import *时导入,而不在变量中的元素则不会被导入