过程抽象—控制语句和高级函数(一)
Luckyjing 于 2020年11月19日 发表在 计算机程序与解释
条件语句
上节介绍的表达式和函数功能非常有限,因为缺少根据比较结果来执行不同操作的方法。
控制语句引入此功能,执行控制语句可以决定解释器接下来干什么,而不是进行计算,常见控制语句有:条件语句、迭代语句
条件语句:
1 2 3 4 5 6 | if <expression>: <suite> elif <expression>: <suite> else : <suite> |
条件语句执行条件如下:
(1)计算头表达式
(2)如果头表达式为真,执行, 否则跳转至条件语句的所有后续语句
布尔值与布尔表达式
1 2 3 4 5 | >>> 0 = = - 0 True >>> 4 > 2 True >>> 5 > = 5 |
Python有两个布尔值,分别为True和False,常见布尔表达式如下所示
迭代语句
除了选择执行语句外,还需要重复。一般表现为一个函数可以被多次应用,尽管只被定义一次,迭代控制结构用于多次执行同一语句的机制。例如生成生成斐波那契数列函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 斐波那契数列 # 下一个数是前两个数之和 def fib(n): """ compute the nth Fibonacci number, for N>=1. """ pred, curr = 0 , 1 k = 1 while k < n: pred,curr = curr, pred + curr k = k + 1 return curr fib( 3 ) |
while语句
1 2 | while <expression>: <suite> |
while语句执行过程如下:
(1)计算头表达式
(2)如果表达式为真,执行suite,然后返回第一步。
函数测试
测试是验证函数行为是否符合预期,函数语言现在已经非常复杂,因此需要在函数实现开始进行测试。
测试是系统完成此验证的机制,通常采用另外一种函数的形式,该函数包含一个或多个被测函数的示例调用。然后将返回值与预期进行验证。
assertions语句
在布尔上下文中有一个表达式,后跟带引号的文本行,如果表达式的计算为假,则显示该行。
示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 | # 斐波那契数列 def fib(n): """ compute the nth Fibonacci number, for N>=1. """ pred, curr = 0 , 1 k = 1 while k < n: pred,curr = curr, pred + curr k = k + 1 return curr assert fib( 3 ) = = 3 , 'The 8th Fibonacci number should be 3' |
错误如下:
可以通过函数的方式进行多个样例测试
doctest测试
Python提供了一种更改为便捷的测试方式,把简单测试直接放置在函数的文档字符串中,文档字符串的第一行包含该函数的单行表示,后跟空白行,文档字符串可能包含调用该函数的示例交互式对话,具体如下:
调用测试模式代码如下:
1 2 | from doctest import testmod testmod() |
结果输出如下: