程序控制语句
1. 布尔类型
概要
在跟踪程序状态或程序中重要的条件方面,布尔值提供了一种高效的方式。
bool 类型其实是 int 类型的字类:
isinstance(True, bool) # True
isinstance(False, bool) # True
isinstance(True, int) # True
isinstance(False, int) # True在 Python 中,可以使用关键字 and, or, not 来执行布尔运算:
True and False # False
False or True # True
(30 > 45) or (27 < 30) # True
not True # False
not (3 > 4) # True注意:尽管按照优先级规则上述括号可以消去,但是适当加入括号增强其可读性也是非常有用的。
and运算符被隐式链接在以下布尔表达式中:a < b < c # a < b and b < c a == b == c # a == b and b == c
运算优先级
- 最高:
<, >, <=, >=, !=, == - 次之:
not - 最低:
and, or
短路运算
布尔运算符
and和or也被称为短路运算符:它们的参数从左至右解析,一旦可以确定结果解析就会停止。例如,如果 A 和 C 为真而 B 为假,那么 A and B and C 就不会解析 C 了。当作用于普通值而非布尔值时,短路操作符的返回值是一个变量:
x and y: 若 x 为假,返回 x,否则,直接返回 y。def and_as_function(x, y): """x and y 与之等价""" if not x: return x else: return y实际上,
and运算表达式中: 有假则返回假;无假则返回最后一个真。x or y:若 x 为真,返回 x,否则,直接返回 y。def or_as_function(x, y): """x or y 与之等价""" if x: return x else: return y实际上,
or运算表达式中:有真则取第一个真;无真则返回假。
有趣的是这意味着,当执行语句
True or x时,变量 x 不必被定义,因为它总是返回True. 同样地,这也适用于语句False and x.
布尔值的转换规则
| Bool | False | True |
|---|---|---|
| string | '' | 非空字符串 |
| number | 0 | 非零 |
| list | [] | 非空列表 |
| tuple | () | 非空元组 |
| array | array([]), array([0]) | $array([a])(a\neq0)$ |
若array数组含一个以上元素,异常。
2. 循环语句
循环语句都可带有else子句,它会在循环耗尽一可迭代对象(使用for)或循环条件变为假值(使用while)时被执行,但如果此循环被break语句终止则不会执行else子句。
也就是说,这里的
else子句更像try…except语句中的else子句,而不像if…else…语句中的else子句。
使用range()函数时,还可指定步长:
list(range(2, 11, 2)) # [2, 4, 6, 8, 10]活用标志:在要求很多条件都满足才继续运行的程序中,可定义一个变量,用于判断整个程序是否处于活动状态,这个变量被称为标志,充当了程序的交通信号灯。可以让程序在标志为True的时候继续运行,并在任何事件导致标志的值为False时让程序停止运行:

拓展思路:以while True打头的循环将不断运行,直到遇到break语句。
for循环是一种遍历列表的有效方式,但在for循环中不应修改列表,否则将导致Python难以跟踪其中的元素。若要在遍历列表的同时对其进行修改,可使用while循环。



双循环列表解析表达式:
>>> [(a,b) for a in range(3) for b in range(4,6)]
[(0, 4), (0, 5), (1, 4), (1, 5), (2, 4), (2, 5)]相当于:
>>> tar = []
>>> for a in range(3):
... for b in range(4,6):
... tar.append((a,b))
...
>>> tar
[(0, 4), (0, 5), (1, 4), (1, 5), (2, 4), (2, 5)]3. 条件语句
if 条件和对应的执行语句若想放一行必须同时写上 else 和 相应的执行语句:

return 语句同上,若放在一行必须同时有 if 和 else.
else是一句包罗万象的语句,只要不满足任何if或elif中的条件测试,其中的代码就会执行,这可能会引入无效甚至恶意的数据。if-elif-else结构功能强大,但仅适合用于只有一个条件满足的情况:遇到通过了的测试后,Python就跳过余下的测试。
