Python 2: 为什么xrange不叫irange?

6 投票
1 回答
694 浏览
提问于 2025-04-18 01:30

这个问题有点哲学性质。Python 2中有一个很棒的itertools模块,特别提供了一些生成器版本的内置函数,比如mapfilterzipslice。这些生成器版本分别叫做imapifilterizipislice。我理解它们名字前面的i代表i​terator(迭代器)。但是xrange也是类似的,它是range的一个版本,返回的是生成器对象,而不是一个很大的列表。那么,为什么它不叫irange呢?那么x这个前缀到底是什么意思呢?

1 个回答

5

因为 xrange() 是在语言中引入迭代器之前添加的,而且它本身并不是一个迭代器。

Python 1.0 是在1994年发布的,所以 xrange() 是很早就加入的。这里的 x 可能并没有特别的意思。

不过 xrange() 实际上并不是真正的迭代器,它是一个 可迭代对象;你可以多次遍历它,这和迭代器不同。它也是一个序列,因为它有长度并且可以通过索引访问。

因此,这个对象被重新命名为 range()(完全替代了Python 2中的 range() 函数),而且它的序列特性也得到了进一步扩展。

撰写回答