循环是计算机程序中经常用到的流程。试想一下,如果我们有一万个数据要处理,每个数据处理的流程都一模一样,如果我们用顺序流程就要把处理流程重复写一万遍,是不是很累?而用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')

猜猜这段代码的输出吧,如果没有把握就亲自执行一下就明白了。

总结

循环是程序中另外一种重要的流程控制,在批量处理数据、服务器程序中大量使用。


已注销
326 声望27 粉丝