1.2 控制语句
Python包含了针对顺序、条件执行和迭代等情况的常见的各种控制语句。语句的序列是一组连续编写的语句。序列中的每一条语句必须以相同的缩进开始。本节将介绍条件执行和迭代的控制语句。
1.2.1 条件语句
Python条件语句的结构和其他语言中的类似,即通过关键字if、elif和else以及冒号和缩进来实现。
单向if语句的语法如下:
if <Boolean expression>: <sequence of statements>
正如前面提到的,布尔表达式(boolean expression)可以是任意的Python值,其中的一些值被当作False,另一些值被当作True。如果布尔表达式为True,就运行该语句序列;否则,什么也不会发生。语句序列(一条或多条语句)必须至少按照一个空格或制表符(通常一个制表符是4个空格)来缩进或对齐。冒号是唯一的分隔符,如果序列中只有一条语句,它可以紧跟在同一行的冒号之后。
双向if语句的语法如下:
if <Boolean expression>: <sequence of statements> else: <sequence of statements>
注意缩进和关键字else后面的冒号。在这种用法下,只有一个序列将被运行。如果布尔表达式为True,那么第一个序列会被运行;如果布尔表达式为False,那么第二个序列将被运行。
多向if语句的语法如下:
if <Boolean expression>: <sequence of statements> elif <Boolean expression>: <sequence of statements> ... else: <sequence of statements>
多向if语句也只会运行一个语句序列。多向if语句会包含一个或多个不同的布尔表达式,除了第一个布尔表达式,其他布尔表达式都会被写在关键字elif之后。在这种用法里,最后一个else:分支是可以省略的。
下面的示例是比较两个数的大小的问题,并输出正确的答案:
if x > y: print("x is greater than y") elif x < y: print("x is less than y") else: print("x is equal to y")
1.2.2 使用if __name__ == "__main__"
前面讨论的numberguess程序包含了一个main函数的定义和如下的if语句:
if __name__ == "__main__": main()
上述if语句的作用是,允许程序员要么将模块当作一个独立的程序运行,要么从Shell窗口或另一个模块中导入它。其工作方式为:每个Python模块都包含一组内建的模块变量,当加载该模块时,Python虚拟机会自动为这些变量赋值。
如果该模块是作为一个独立的程序加载(要么从一个终端提示符运行它,要么从一个IDLE窗口加载它)的,该模块的_name_变量会设置为字符串"_main_";否则,这个变量会设置为模块的名称,在这个例子中,也就是"numberguess"。不管怎么样,该变量的赋值都会在模块中的任何代码加载之前完成。因此,当执行到模块末尾的if语句时,只有模块作为一个独立的程序启动,才会调用模块的main函数。
在开发独立的程序模块时,if _name_ == "_main_"这样的习惯用法很有用,因为这使得程序员只要把模块导入Shell窗口中就可以看到其相关帮助文档。同样,程序员在IDLE中进行模块开发时,可以在模块中用这一方法来编写和运行测试工具函数。
1.2.3 循环语句
Python的while循环语句的结构和其他语言也是类似的。其语法如下。
while <Boolean expression>: <sequence of statements>
下面的示例展示了如何计算从1到10的乘积并输出结果。
product = 1 value = 1 while value <= 10: product *= value value += 1 print(product)
注意,这里使用了扩展的赋值运算符*=。product *= value这行代码等价于如下的代码。
product = product * value
Python中的for循环语句可以用于在值的序列上进行更简洁的迭代。这条语句的语法如下。
for <variable> in <iterable object>: <sequence of statements>
当运行这个循环时,可迭代对象(iterable object)中的每一个值都被赋给循环变量,并且把这个值应用在其后面的语句序列里。可迭代对象的示例是字符串和列表。下面的代码使用了Python的range函数,返回整数的一个可迭代的序列,可以计算前面示例中的乘积。
product = 1 for value in range(1, 11): product *= value print(product)
Python程序员通常更喜欢用for循环来迭代确定范围的值或值的序列。如果继续循环的条件是某个布尔表达式,那么程序员会使用while循环。