循环
循环的作用在于将一段代码重复执行多次。
while 循环
while <condition>:
<statesments>
Python会循环执行<statesments>
,直到<condition>
不满足为止。
例如,计算数字0
到1000000
的和:
In [1]:
- i = 0
- total = 0
- while i < 1000000:
- total += i
- i += 1
- print total
- 499999500000
之前提到,空容器会被当成 False
,因此可以用 while
循环来读取容器中的所有元素:
In [2]:
- plays = set(['Hamlet', 'Macbeth', 'King Lear'])
- while plays:
- play = plays.pop()
- print 'Perform', play
- Perform King Lear
- Perform Macbeth
- Perform Hamlet
循环每次从 plays
中弹出一个元素,一直到 plays
为空为止。
for 循环
for <variable> in <sequence>:
<indented block of code>
for
循环会遍历完<sequence>
中所有元素为止
上一个例子可以改写成如下形式:
In [3]:
- plays = set(['Hamlet', 'Macbeth', 'King Lear'])
- for play in plays:
- print 'Perform', play
- Perform King Lear
- Perform Macbeth
- Perform Hamlet
使用 for
循环时,注意尽量不要改变 plays
的值,否则可能会产生意想不到的结果。
之前的求和也可以通过 for
循环来实现:
In [4]:
- total = 0
- for i in range(100000):
- total += i
- print total
- 4999950000
然而这种写法有一个缺点:在循环前,它会生成一个长度为 100000
的临时列表。
生成列表的问题在于,会有一定的时间和内存消耗,当数字从 100000
变得更大时,时间和内存的消耗会更加明显。
为了解决这个问题,我们可以使用 xrange
来代替 range
函数,其效果与range
函数相同,但是 xrange
并不会一次性的产生所有的数据:
In [5]:
- total = 0
- for i in xrange(100000):
- total += i
- print total
- 4999950000
比较一下两者的运行时间:
In [6]:
- %timeit for i in xrange(1000000): i = i
- 10 loops, best of 3: 40.7 ms per loop
In [7]:
- %timeit for i in range(1000000): i = i
- 10 loops, best of 3: 96.6 ms per loop
可以看出,xrange
用时要比 range
少。
continue 语句
遇到 continue
的时候,程序会返回到循环的最开始重新执行。
例如在循环中忽略一些特定的值:
In [8]:
- values = [7, 6, 4, 7, 19, 2, 1]
- for i in values:
- if i % 2 != 0:
- # 忽略奇数
- continue
- print i/2
- 3
- 2
- 1
break 语句
遇到 break
的时候,程序会跳出循环,不管循环条件是不是满足:
In [9]:
- command_list = ['start',
- 'process',
- 'process',
- 'process',
- 'stop',
- 'start',
- 'process',
- 'stop']
- while command_list:
- command = command_list.pop(0)
- if command == 'stop':
- break
- print(command)
- start
- process
- process
- process
在遇到第一个 'stop'
之后,程序跳出循环。
else语句
与 if
一样, while
和 for
循环后面也可以跟着 else
语句,不过要和break
一起连用。
- 当循环正常结束时,循环条件不满足,
else
被执行; - 当循环被
break
结束时,循环条件仍然满足,else
不执行。 不执行:
In [10]:
- values = [7, 6, 4, 7, 19, 2, 1]
- for x in values:
- if x <= 10:
- print 'Found:', x
- break
- else:
- print 'All values greater than 10'
- Found: 7
执行:
In [11]:
- values = [11, 12, 13, 100]
- for x in values:
- if x <= 10:
- print 'Found:', x
- break
- else:
- print 'All values greater than 10'
- All values greater than 10