Python测试之道
上QQ阅读APP看书,第一时间看更新

第3章 Python的基础

3.1 语法规范

说起Python的语法,就两个字“简单”。不夸张地说,一天就能入门。相比于其他语言的繁文缛节,一丝不苟,Python可谓相当不拘一格。

3.1.1 换行与缩进

Python的语法其实总结一下就两条。

(1)一条代码作为一行:比如一个赋值、一个运算、一个请求、一条打印等。

(2)对齐和缩进:同一级别的代码只需要保持对齐就可,对于不同级别的代码进行缩进,这样就能区分开代码执行的逻辑。

第一条其实很好理解,类似于近体诗,一句代表一个完整的意思,最后组成一个整体的代码。

悄悄的我走了

正如我悄悄的来

我挥一挥衣袖

不带走一片云彩

对应的代码如下。

a = 1

b = 2

c = a+b

print (c)

运行结果如图3.1所示。

图3.1 运行结果图

一目了然可以看懂代码,给变量a赋值为1,给变量b赋值为2,变量c等于a+b,打印变量c的值。

在理解第一条的基础上,再来理解第二条,上面的每一句诗都是同一个级别的,所以没有高低之分,只有顺序的先后。而需要表达层级关系的时候,可以用缩进来表示上下的层级,这个类似于Word的目录结构。

1 Python基础

1.1 Python语法1

1.2 Python语法2

1.2.1 Python语法2.1

实例代码:

a = 1

if a < 0:

  print("负数")

else:

  if a == 0:

   print ("零")

  else:

   print ("正数")

运行结果如图3.2所示。

图3.2 运行结果图

给变量a赋值为1,然后判断a是否小于0,如果小于0,打印负数,如果不小于,则进入else的执行模块(if和else是平级的,即如果执行了if,就不执行else,反之也一样),然后进入else模块,继续判断a是否等于0,如果等于0,打印零,否则打印正数(else中的if和else是平级的,但隶属于else,只有当判断执行到了else才会再继续执行if和else的判断)。这个判断结构会在之后的章节中重点介绍,这里只是为了说明缩进和层级的关系。

明白了这些,就已经对Python的语法入门了。

3.1.2 模块导入

如果在Python程序中需要调用某些方法,而这些方法又存在于Python的标准模块或者第三方模块之中,那就需要对模块进行导入,只有将模块导入后才能调用相应的方法。

import 语句

先以导入Python自带的random模块为例,需要生成一个0~100的随机数并打印随机数的结果。

实例代码:

1 import random

2 a = random.randint(0,100)

3 print (a)

代码说明:

1 导入random模块。

2 调用random模块中的randint()函数,这个函数会随机生一个0~100的整数,并将结果赋值给变量a。

3 打印产生的随机数变量a。

运行结果如图3.3所示。

图3.3 运行结果图

由此可见,调用模块的方法就是先导入,然后以(模块.方法)的方式调用,当然有些方法里面还可以嵌套方法(模块.子模块1.方法a),即调用模块下的子模块1下的方法a,这是一个从属关系,一层层往下调用。

实例代码:

1 import sys

2 a = sys.modules.keys()

3 print (a)

代码说明:

(1)导入sys模块。

(2)调用sys模块中的modules模块下的keys()函数,这个函数返回所有已经导入的模块列表,并将结果赋值给变量a。

运行结果如图3.4所示。

图3.4 运行结果图

也许从代码的角度来说,这种写法比较冗余,当大量调用子模块下的各种方法时,需要写很长的代码,不过这种方法适用于初学者,因为初学者对于模块内的方法并不十分了解,所以导入整个模块,然后一层层往下找适用的方法,直到选择出最适合的方法。但对于已经熟练知道需要调用什么方法的人来说,就可以更精准地调用子模块,从而减少代码量。这时候需要使用form … import …来实现调用。从语法的语句来说很好理解,即从哪个模块中导入它的子模块。

实例代码:

1 from sys import modules

2 a = modules.keys()

3 print (a)

代码说明:

(1)从sys模块下导入modules模块。

(2)直接调用 modules 模块下的 keys()函数,这个函数返回所有已经导入的模块列表,并将结果赋值给变量a。

运行结果如图3.5所示。

图3.5 运行结果图

这两段代码运行的结果是一致的,只是导入的模块层级不同,所以调用的层级也不同。值得注意的是如果使用第二种导入方式的话,只有modules这个模块下的方法可用,sys下的其他模块是不可用的。

还有一种导入模块的方式与第二种类似,只是不再指定某个子模块,而是模块下的所有子模块。

实例代码:

1 from sys import *

2 a = modules.keys()

3 print (a)

运行结果也是一样的,区别于第二种的是只能使用modules模块下的方法,其他子模块一样可用,所以3种方式可以根据个人喜好或者实际需要灵活选择使用。

3.1.3 注释

Python 的注释与其他编程语言的注释是不一样的,一般主流的编程语言都是以//来注释一行代码,或者/ * */注释一段代码,而Python却是特有的用#来注释。

Python单行的注释以#开头,所有#后的这一行代码或者中文注释都不会被执行。

实例代码:

1 a = 1

2 b = 2

3 # a = b

4 print (a+b)

运行结果如图3.6所示。

执行这段代码,打印结果是3,因为执行到b = 2之后后面的注释行不会被执行,所以第三行a = b不会被执行,所以a+b的结果是1+2=3,而不是2+2=4。

如果要注释一段代码,则有一点不同,把3个单引号或者3个双引号当作一行,分别加到需要注释代码的上一行和下一行。

实例代码:

1 """

2 a = 1

3 print (a)

4 """

5 b = 4

6 print (b)

运行结果如图3.7所示。

图3.6 运行结果图

图3.7 运行结果图

执行这段代码,运行结果是4,因为第二行和第三行代码被注释了,所以不会被执行。