原则
- 每一个模块,当它被导入的时候应该符合其所有的代码都应该可以被顺利执行
- 在导入文件时,其所有未有任何缩进的代码都会被执行一遍!
举例:
模块1:p1
def func():
print("哈哈哈")
print("ooooo")
导入:
import p1
print("*" * 10)
结果
ooooo
**********
再例子:
p1:
def func():
print("哈哈哈")
print("ooooo")
func()
导入
import p1
print("*" * 10)
运行结果:
ooooo
哈哈哈
**********
为此
这便会有问题,在实际开发中,怎么解决模块的测试程序(主程序)再被导入的时候,不被执行呢?
这里便引入__name__
魔法方法
__name__
:
- 当文件的作用为测试程序是否可执行时候,它的值永远是
'__main__'
,是字符串哦! - 当文件的作用是被作为模块进行导入的时候,它的值便是文件名字
比如:
p1:
def run():
print("哈哈")
print(__name__)
run() #测试run()程序是否可执行
运行结果:
__main__
哈哈
被导入呢?
import p1
print("*" * 10)
执行结果
p1
哈哈
**********
看见没有?print(__name__)
中的值变成了p1,即文件名字
那么,我们继续上面的话题,如何让文件中起着测试程序是否可执行作用的代码在被导入的时候不被执行呢?
(有人看到这可能比较懵逼,什么测试?,什么可执行?,其实当我们开发一个项目时,一个项目是由很多个模块组成的,而每个模块又可能由不同的人写,那么书写模块的人为了该模块再被导入的时候可以被顺利执行,他自己肯定要首先执行一遍,那么执行的程序叫测试程序,即主程序)
我们可以用判断语句:
举例:
文件名字:p2
def func():
a = "小猫"
b = "小狗"
return "%s在某个不经意的时刻便爱上了%s"%(a,b)
def func1():
a = "男人"
b = "女人"
return "%s 的责任就是让 %s 放心"%(a,b)
if __name__ == '__main__':
print(func())
print(func1())
'''
第十一行以后并不是标准的写法
应该写成
def main(): #用来写测试程序
print(func())
print(func1())
if __name__ == '__main__': #用来判断
main()
'''
导入:
import p2
print("*"*10)
结果:
**********
import p2
print(p2.func())
print(p2.func1())
print("*"*10)
结果:
小猫在某个不经意的时刻便爱上了小狗
男人 的责任就是让 女人 放心
**********
大哥们?懂了吗
模块标准语法:
def func():
pass
def func():
pass
def func():
pass
def func():
pass
def func():
pass
def main():
pass
if __name__=="__main__":
main()