PHP前端开发

Python中流程控制语句的详细介绍

百变鹏仔 3小时前 #Python
文章标签 详细介绍

除了刚才介绍的while语句之外,Python也从其他语言借鉴了其他流程控制语句,并做了相应改变。Python中流程控制语句的详细介绍

4.1 if Statements

或许最广为人知的语句就是if语句了。例如:

x = int(input("Please enter an integer: "))if x 

可以存在零个或者多个elif子句,而且else子句是可选的。关键字elif是else if的间歇形式,可以避免过度的缩排。if ... elif ... elif ...序列是其他语言中switch或者case语句的替代品。

4.2 for Statements

Python中的for语句与C或者Pacsal中的for语句有微小差别。Python没有采用对等差数列数字迭代的方式(在Pascal中)实现循环,也没有采用如C语言一样赋予用于定义迭代步数和停止条件的方式实现循环,Python的for语句在任意序列(列表或者字符串)的项上迭代,以项在序列中的出现顺序迭代。例如(没有别的意思):

# Measure some strings:words = ['cat', 'window', 'defenestrate']for w in words:print(w, len(w))

如果需要在循环内修改正在遍历的序列(例如复制选中项),推荐首先对序列复制。遍历序列时并没有隐式地创建备份。切片语句是的复制序列特别方便:

for w in words[:]:  # Loop over a slice copy of the entire list.if len(w) > 6:        words.insert(0, w)words

使用for w in words:O,实例会尝试创建一个无限列表,不断地插入字符串defenestrate。

立即学习“Python免费学习笔记(深入)”;

4.3 The range() Function

如果确实需要对数字的序列做迭代,built-in函数range()可以派上用场。这个函数生成算术数列:

>>> for i in range(5):...     print(i)...01234

end参数不会被包含到生成的序列中;range(10)生成10个值,序列项的合法索引长度是10。可以让range在另一个数字上开始,或者指定一个不同的增量(甚至是负数;有时增量称作步长'step'):

range(5, 10)   5 through 9range(0, 10, 3)   0, 3, 6, 9range(-10, -100, -30)  -10, -40, -70

需要对序列的索引做迭代时,可以像下面这样结合range()和len()函数:

>>> a = ['Mary', 'had', 'a', 'little', 'lamb']>>> for i in range(len(a)):...     print(i, a[i])...0 Mary1 had2 a3 little4 lamb

然而,在大多数这样的情况下,使用enumerate()函数很方便,详细参考Looping Techniques。

直接打印range()的结果会很奇怪:

>>> print(range(10))range(0, 10)

在许多情形中range()返回的对象就像一个列表一样,但是事实上它并不是。当迭代这个对象时,它会返回目标序列中的连续项,但是为了节约空间,并没有真的创建一个列表。

这种对象被称为iterable(可迭代的),即,若一些函数或者结构期待从某种东西中获得连续项,直到结束,那么iterable对象可以满足这种需求。for语句就是这样的迭代程序。list()函数是另外一个,它使用可迭代对象创建列表:

>>> list(range(5))[0, 1, 2, 3, 4]

接下来会介绍更多返回可迭代对象和使用可迭代对象作为参数的函数。

4.4 break and continue Statements, and else Clauses on Loops

像C语言一样,break语句跳出for或者while的最内层循环。

循环语句可以有else子句;当for循环遍历完毕循环序列或者while循环的循环条件变为False时,else子句会执行。但是当循环被break语句终止时,else子句不会执行。以下寻找素数的实例可以证明这一点:

>>> for n in range(2, 10):...     for x in range(2, n):...         if n % x == 0:...             print(n, 'equals', x, '*', n//x)...             break...     else:...         # loop fell through without finding a factor...         print(n, 'is a prime number')...2 is a prime number3 is a prime number4 equals 2 * 25 is a prime number6 equals 2 * 37 is a prime number8 equals 2 * 49 equals 3 * 3

(代码是正确的。靠近看:else子句属于for循环,而不是if语句。)

当与循环一句一起使用时,else子句更多的跟try语句中的else子句相似,而与if语句的else子句不同:当没有异常发生时,try语句的else子句会执行,在循环中,没有break发生时,else子句会执行。想要了解