python基础教程:流程控制之for循环
循环是计算机程序中经常用到的流程。试想一下,如果我们有一万个数据要处理,每个数据处理的流程都一模一样,如果我们用顺序流程就要把处理流程重复写一万遍,是不是很累?而用for循环就简单多了。
for循环
for循环其实前面讲遍历列表、字典的时候我们就已经遇到了,它的语法很简单,就是for item in items
。
下面我们看一下for循环:
numbers = [1,2,3,4,5,6] for n in numbers: x = n * n print(x)
for循环用来遍历一个序列是最常用的,有时候并没有给我们一个现成的序列要遍历,只是我们的程序需要循环特定的次数,这时候我们就用到了range()
函数。在Python 3.6中,range
并不是一个内置函数,而是一个类型,但是在Python 2.7中它是一个内置函数:
In [134]: range? Init signature: range(self, /, *args, **kwargs) Docstring: range(stop) -> range object range(start, stop[, step]) -> range object Return an object that produces a sequence of integers from start (inclusive) to stop (exclusive) by step. range(i, j) produces i, i+1, i+2, ..., j-1. start defaults to 0, and stop is omitted! range(4) produces 0, 1, 2, 3. These are exactly the valid indices for a list of 4 elements. When step is given, it specifies the increment (or decrement). Type: type Subclasses: In [135]: type(range) Out[135]: type In [136]: len? Signature: len(obj, /) Docstring: Return the number of items in a container. Type: builtin_function_or_method In [137]: range(4) Out[137]: range(0, 4)
上面是Python 3.6中从IPython看到的range的说明,它的Type是type,而不像内置函数len的Type是builtin_function_or_method。
虽然range的类型从Python 2中的内置函数变成了3.6中的type,但并不影响我们对它的使用。假如我们想打印 hi 特定次数,
比如3次,下面就是range的经典用法:
for i in range(3): print('hi')
这里的i
并没有在循环中被使用,为了不让代码规范检查程序(如pylint)报错“有未使用的变量”,我们可以用下划线_
替代
。
range()参数个数的不同也代表了生成不同的序列:
- range(5) 生成从0-4共5个整数序列
- range(1,5) 生成从1开始到5为止但不包含5的整数序列,即1-4
- range(1,5,2) 从1开始到5为止,每次步长为2的整数序列,即:[1,3]
比如,求10以内偶数的和:
sum = 0 for i in range(0, 10, 2): sum += i print(sum)
while 循环
while是另外一种形式的循环,它的语法如下所示:
while condition: do something
示例代码:
a = 3 while a > 0: print(a) a -= 1
上面代码循环3次,每次会对条件变量a减1,当while发现a不大于0时就会终止循环。
如果在循环里面,我们不对a进行改变,会发生什么?没错,会出现死循环!你的CPU使用率立马爆满100%,满屏不断刷新打印3。死循环是编程中的大忌,一定要小心哦。
break和continue
break是终止(或叫做“跳出”)整个循环;continue是跳过本次循环后面的代码去执行循环的下一次。要理解这兄弟俩,还是看代码吧:
for i in range(10): if i < 3: continue if i > 7: break prirnt(i)
这段代码的意思是,
如果i<3就continue到下一次的循环,continue后面的代码不会被执行,所以0,1,2就不会被打印;
如果i>7就break整个循环,即跳出循环,7后面的8,9也自然不会被打印;
不满足上面两个情况的3,4,5,6,7就被打印了。
所以这段代码的输出是:
3 4 5 6 7
以上例子是for循环的,但break和continue同样适用于while循环。小猿们可以在本节结束后,练习一下while循环中的break和continue
循环的else
这应该是Python独有的特性吧,循环也可以有else。当循环正常结束(没有break)后,就会执行else代码段:
for i in range(3): print(i) else: print('loop ends') for i in range(3): if i > 1: break print(i) else: print('loop ends')
猜猜这段代码的输出吧,如果没有把握就亲自执行一下就明白了。
总结
循环是程序中另外一种重要的流程控制,在批量处理数据、服务器程序中大量使用。