一直对Python程序的执行顺序有些疑惑,例如python程序是顺序执行的,那怎么还有main函数的出现呢?
Python代码在执行过程中,遵循下面的基本原则:普通语句,直接执行;
碰到函数,将函数体载入内存,并不直接执行
碰到类,执行类内部的普通语句,但是类的方法只载入,不执行
碰到if、for等控制语句,按相应控制流程执行
碰到@,break,continue等,按规定语法执行
碰到函数、方法调用等,转而执行函数内部代码,执行完毕继续执行原有顺序代码
import os # 1 print('<[1]> time module start') # 2 class ClassOne(): print('<[2]> ClassOne body') # 3 def __init__(self): # 10 print('<[3]> ClassOne.__init__') def __del__(self): print('<[4]> ClassOne.__del__') # 101 def method_x(self): # 12 print('<[5]> ClassOne.method_x') class ClassTwo(object): print('<[6]> ClassTwo body') # 4 class ClassThree(): print('<[7]> ClassThree body') # 5 def method_y(self): # 16 print('<[8]> ClassThree.method_y') class ClassFour(ClassThree): print('<[9]> ClassFour body') # 6 def func(): print("function func") if __name__ == '__main__': # 7 print('<[11]> ClassOne tests', 30 * '.') # 8 one = ClassOne() # 9 one.method_x() # 11 print('<[12]> ClassThree tests', 30 * '.') # 13 three = ClassThree() # 14 three.method_y() # 15 print('<[13]> ClassFour tests', 30 * '.') # 17 four = ClassFour() four.method_y() print('<[14]> evaltime module end') # 100
- 首先执行#1的import语句
- 执行#2的打印语句
- ClassOne、ClassThree和ClassFour的类定义执行过程中,分别打印#3、#4、#5、#6四句话,但是其中的方法并不执行,仅仅是载入内存
- 碰到#7的if name == 'main':,判断为True,于是执行if内部的代码
- 执行#8的print语句
- 执行#9,实例化一个ClassOne的对象
- 执行#10的初始化方法,打印一条语句
- 返回执行#11的menthod_x调用
- 返回类的定义体,找到#12,执行方法,打印语句
- 再返回#13处,打印
- 执行#14的实例化
- ClassThree没有自定义初始化方法,接着执行#15
- 回到类里找到#16的方法,执行打印语句
- 执行#17
- ......后面不再详述
- 执行完最后的#100的打印语句后,按理说程序应该终止退出了,但由于ClassOne这个类定义了__del__方法,还要在最后执行它内部的代码#101这条打印语句。
另外,一份程序为了区分主动执行还是被调用,Python引入了变量__name__,当文件是被调用时,__name__的值为模块名,当文件被执行时,__name__为'__main__'