本节书摘来自异步社区《Python参考手册(第4版•修订版)》一书中的第1章,第1.10节,作者David M. Beazley

1.10 迭代与循环

最常用的循环结构是for语句,它可以用来对容器成员进行迭代操作。迭代是Python中内涵最丰富的功能之一。但最常见的迭代形式是简单循环访问一个序列(如字符串、列表或元组)的所有成员,例如:

for n in [1,2,3,4,5,6,7,8,9]: 
    print "2 to the %d power is %d" % (n, 2**n)

在这个例子中,每次迭代都会将列表[1,2,3,4,...,9]中的下一个值赋给变量n。因为在整数范围内执行循环十分常见,为此经常会使用下面的快捷方法:

for n in range(1,10):
    print "2 to the %d power is %d" % (n, 2**n)

range(i, j, [,步长])函数创建的对象表示值在i到j-1之间的整数范围。如果起始值i被省略,则认为是0。第三个参数是可选的步长值。例如:

a = range(5)         # a = 0,1,2,3,4
b = range(1,8)       # b = 1,2,3,4,5,6,7
c = range(0,14,3)    # c = 0,3,6,9,12
d = range(8,1,-1)    # d = 8,7,6,5,4,3,2

在使用range()函数时请注意,在Python 2中,它创建的值是已经用整数值完全填满的列表。当范围非常大时,这可能会在不经意间耗掉所有可用内存。因此,在老式的Python代码中,可能会看到程序员使用另一个函数xrange()。例如:

for i in xrange(100000000):    # i = 0,1,2,...,99999999
  statements

进行查找时,xrange()函数创建的对象会在收到查询请求时根据需要计算它所表示的值。因此,它成为了表示极大范围整数值的首选方式。在Python 3中,xrange()函数已经更名为range(),并且已删除了老式range()函数的功能。

for语句并不仅限于处理整数序列,还可用于迭代多种对象,包括字符串、列表、字典和文件,例如:

a = "Hello World" 
# 打印出a中的每个字符
for c in a:
    print c

b = ["Dave","Mark","Ann","Phil"]
# 打印出一个列表的成员
for name in b:
    print name

c = { 'GOOG' : 490.10, 'IBM' : 91.50, 'AAPL' : 123.15 }
# 打印出一个字典的所有成员
for key in c:
    print key, c[key]

# 打印一个文件中的所有行
f = open("foo.txt")
for line in f:
    print line,

for循环是Python最强大的语言特性之一,因为你可以创建自定义的迭代器对象和生成器函数,为它提供值序列。本章稍后和第6章将会讲述有关迭代器和生成器的更多内容。