range() 函数

如果你需要遍历一个数字的序列,内建函数 range() 就可以随时使用。他可以生成一个等差数列:

  1. >>> for i in range(5):
  2. ... print(i)
  3. ...
  4. 0
  5. 1
  6. 2
  7. 3
  8. 4

给定的终点永远不会成为生成序列的一部分。 range(10) 生成了 10 个数字,长度为 10 的序列的每一项元素的合法索引值。可以让 range (区间) 的开头是另一个数字,或者自己指定一个具体的增量 (甚至是负数,有时这个数被称作’步长’):

  1. range(5, 10)
  2. 5 9
  3. range(0, 10, 3)
  4. 0, 3, 6, 9
  5. range(-10, -100, -30)
  6. -10, -40, -70

遍历一个序列的索引值,你可以结合使用 range() 和 len(),如下所示:

  1. >>> a = ['Mary', 'had', 'a', 'little', 'lamb']
  2. >>> for i in range(len(a)):
  3. ... print(i, a[i])
  4. ...
  5. 0 Mary
  6. 1 had
  7. 2 a
  8. 3 little
  9. 4 lamb

然而在大多数情况下,用 enumerate() 函数会更加方便。参考循环技术

如果你打印一个 range,就会发生奇怪的事情:

  1. >>> print(range(10))
  2. range(0, 10)

在很多方式下,range() 函数的返回对象的行为就和列表一样,但是,事实上它并不是。它其实是一个对象,这个对象在你遍历它时,返回你希望得到的序列中的连续元素。但它并不真正是一个列表,所以它节省存储空间。

我们称这种对象为 可遍历对象,这种对象适合作为一些函数和结构的一种 目标对象,这些函数和结构期望从该 目标对象 中获取连续的元素,一直到获取完为止。list() 是另一种这样的函数,它可以从可遍历对象中生成列表:

  1. >>> list(range(5))
  2. [0, 1, 2, 3, 4]

在后面的章节里,我们将会看到更多接收可遍历对象作为参数,然后返回可遍历对象的函数。