Python 2: 为什么xrange不叫irange?
这个问题有点哲学性质。Python 2中有一个很棒的itertools
模块,特别提供了一些生成器版本的内置函数,比如map
、filter
、zip
和slice
。这些生成器版本分别叫做imap
、ifilter
、izip
和islice
。我理解它们名字前面的i代表iterator(迭代器)。但是xrange
也是类似的,它是range
的一个版本,返回的是生成器对象,而不是一个很大的列表。那么,为什么它不叫irange
呢?那么x这个前缀到底是什么意思呢?
1 个回答
5
因为 xrange()
是在语言中引入迭代器之前添加的,而且它本身并不是一个迭代器。
- 迭代器是在 PEP 234 中引入的,这个提案是在2001年提出的。
xrange()
是在1993年被加入Python的。
Python 1.0 是在1994年发布的,所以 xrange()
是很早就加入的。这里的 x
可能并没有特别的意思。
不过 xrange()
实际上并不是真正的迭代器,它是一个 可迭代对象;你可以多次遍历它,这和迭代器不同。它也是一个序列,因为它有长度并且可以通过索引访问。
因此,这个对象被重新命名为 range()
(完全替代了Python 2中的 range()
函数),而且它的序列特性也得到了进一步扩展。