
4.1 顺序执行
案例70 最简单的流程
导语
在应用程序中,最简单的代码就是一句一句地执行,完全按照代码出现的顺序进行。如本例中,连续五次调用print函数,依序输出五个单词。
操作流程
步骤1:新建代码文件,命名为1.py。
步骤2:在代码文件中依次输入以下代码,连续调用print函数。

步骤3:运行上述代码,屏幕上会按代码调用的顺序,输出以下五个单词。

案例71 声明阶段与调用阶段
导语
代码对象可以分为声明和调用两个阶段。当代码模块被执行时,无论对象是否被调用,声明语句都会被执行,声明语句执行的顺序与对象被声明的顺序相同。
例如,下面代码声明了两个函数。

代码在运行时,先执行def a(x)这一行,但函数体中的return语句不会执行;声明a函数后,接着执行def b()一行,但里面的print('called')一行不会执行。
函数体内部的代码只有当函数被调用时才会执行,例如,运行以下两行代码,会使a和b函数的函数体部分被执行。

类(class)的声明则有点不同,请看下面代码。

代码首先执行class new_c一行,声明类。随后执行fd_1=1和df_2=2两句,声明类的两个属性,而后执行def set(self,v)一行,声明类的案例方法,但self.fd_3=v这一行不会执行,因为它不是声明语句,除非像下面代码那样,显式调用set案例方法。

函数对象在声明阶段其内部代码不会执行,但类对象在声明阶段如果Python查找它有显式定义的成员,就会进入类的内部执行类成员的声明语句(如上面例子中的df_1、fd_2和set成员)。
操作流程
步骤1:以下为变量声明语句。

变量a和b因为应用了类型批注,在声明时可以不进行赋值,变量c显式赋值为浮点类型。在代码模块运行时,哪怕这三个变量都没有被使用,但这三行代码依然会执行,因为它们是声明语句。
步骤2:声明test函数。

在函数声明阶段,print(x.__class__)这一行不会被执行,只有在该函数被调用时才会执行。
步骤3:下面代码声明两个类。

这段代码在运行时会抛出以下错误:

因为F类中的other成员使用了G类的案例,但在声明F.other成员时G类还没有声明,所以在全局命名空间中找不到名为G的类。要避免此错误,需要先声明G类,再声明F类,即
