几乎任何一个有用的程序也都会至少包含一个循环语句。相信你对循环这个概念并不陌生,在Python里,和其他编程语言类似,我们可以使用for和while实现循环。
使用for循环
相比C中的版本,Python中的for循环更接近自然语言,它采用了for 元素 in 集合这样的语法形式,例如,遍历一个range或list:
for num in range(1, 5):
print(num)
for num in [1, 2, 3, 4]:
print(num)
可以看到,和if类似,for循环语句的末尾,也要使用:表示结束,并且,所有属于for循环的代码,必须有相同的缩进。至于含义,则很好理解,这两个循环打印出来的结果,都是1234。
当我们使用for遍历dictionary的时候,遍历的实际上是它的key,来看个例子:
user = {'email': '11@boxue.io', 'name': 'Mars'}
for info in user:
print(info)
# name
可以看到,在for循环中的info对应的就是user中key的名字。但要说明的是,for循环遍历user时得到的key的顺序,可能和定义user时是不同的,因为dictionary是一个无序集合,我们不能依赖key的定义顺序编写代码。
以上,就是Python中for循环的基本用法。但除此之外,for还有一个自己独特的语法,它也允许我们定义一个else分支,这个分支只有在for自然结束的时候,才会执行。
什么是自然结束呢?简单来说,就是遍历了所有的情况,来看个例子:
for num in range(1, 5):
print(num)
else:
print('All numbers are iterated.')
这样,在遍历完range中的所有数之后,我们就会在控制台看到All numbers are iterated.这样的结果。但是,如果我们在循环中添加个条件中途退出:
for num in range(1, 5):
if num == 2:
break
print(num)
else:
print('All numbers are iterated.')
这样,for循环就不算自然结束,我们也就看不到else分支的执行了。为什么要给for循环添加一个else呢?Hmm... 貌似的确没有一个必须的理由。一个看似还合理的用法,就是当for循环自然结束表示某种应用错误的时候,我们可以在else分支中抛出一个异常,这样可以让代码变得好看一些。稍后,我们讲到错误处理的时候,会提到这种用法。
了解了for的用法之后,接下来,我们来看另外一种循环方式:while。
使用while循环
while的用法和C中几乎是完全一样的,它接受一个boolean表达式,只要表达式的值为True就会一直执行下去:
num = 1
while num < 10:
if num % 2 == 0:
num += 1
continue
print(num)
num += 1
这里,在循环中使用continue表示跳过当前循环中的剩余指令,直接从下一次循环开始。于是,我们就只能在控制台看到1-9中所有的奇数了。