在Python中,xrange是一个常用的函数,它从一个给定的范围内给出一系列的数字。在 Python 2 中,有一个函数可以返回一个 xrange 对象。当我们需要在一个循环中迭代时,我们使用xrange函数。因此,由 xrange 创建的对象主要用于索引和迭代。请记住,xrange 方法目前只在 Python 2 中支持。因为Python 2不再被支持,我们建议使用Python 3和range()方法,而不是xrange()。range()和xrange()方法可以用于循环迭代指定的次数,比方说10次或5次。尽管Python 3没有提供xrange函数,但range函数的工作原理与Python 2中的xrange函数相同。
如果你想开发可以在 Python 2 和 Python 3 上执行的程序,你应该利用range方法。range()返回一个范围对象(一种可迭代的类型),而xrange()返回一个生成器对象,只能用来循环处理整数。唯一具体的范围是按需呈现的,这导致了 "懒惰评估 "这个术语。两者的使用方式不同,质量也不同。返回类型、内存、操作使用和性能都是需要考虑的因素。让我们用一个相应的例子来讨论每个因素,以便更好地理解。
例子1
下面是一些 Python 代码,在返回类型方面对 range() 和 xrange() 进行了比较。首先,我们分别用 "一 "和 "二 "初始化了 range() 和 xrange() 。最后,我们对 "一 "和 "二 "的类型进行了测试。
one = range(20000)
two = xrange(20000)
print ("Return type of range() is given below: ")
print (type(one))
print ("Return type of xrange() is given below: ")
print (type(two))

这里你可以看到range()和xrange()的返回类型。

例2
现在,我们要讨论另一个因素,那就是内存。保存range()产生的范围的变量比包含xrange()创建的范围的变量占用更多内存。这是因为 range() 给出了一个列表,而 xrange() 给出了一个 xrange() 对象。下面的 Python 代码比较了 range() 和 xrange() 在内存方面的情况。我们用range()来初始化 "一",用xrange来初始化 "二"。之后,我们用函数sys.getsizeof来检查 "一 "和 "二 "的大小。Python中的系统模块有一个叫做sys.getsizeof()的函数,它以字节为单位返回对象的内存大小。与其说是考虑对象引用的内存消耗,不如说是考虑项目的内存使用。因为这个方法是平台特定的,所以当内置对象被提供给它时,它返回预期的结果。否则,第三方扩展可能会提供不正确的结果。结果显示,range()消耗的内存较多,而xrange()消耗的内存较少。
import sys
one = range(20000)
two = xrange(20000)
print ("The size using range() is : ")
print (sys.getsizeof(one))
print ("The size using xrange() is : ")
print (sys.getsizeof(two))

这就是前面代码的结果。

例3
因为 range() 产生一个列表,所以它可以用于任何可以应用于列表的操作。然而,由于 xrange() 返回一个 xrange 对象,所以不能对它进行与列表有关的操作,这是一个缺点。这段代码比较了range()和xrange()在操作方面的情况。我们用range()和xrange()初始化了 "一 "和 "二",与前面的例子相同。然后,我们用range()和xrange()测试了切片操作并打印了结果。可以看出,xrange()抛出了一个错误。
one = range(1,6)
two = xrange(1,6)
print ("After slicing with range, the list looks like this: : ")
print (one[2:5])
print ("After slicing with xrange, the list looks like this: : ")
print (two[2:5])

在这里,你可以参考前面代码例子的附件结果。

因为它只检查只包括慢速评估所需数值的生成对象,所以xrange()的实现速度比range()快。在执行上面列出的程序之前,请记住。如果你想写出在Python 2和Python 3中都能运行的代码,使用range()而不是xrange方法,后者在Python 3中已被废弃。在同一序列中多次迭代时,range()更快。Range()会有真正的整数对象,而xrange()每次都要重构整数对象。
总结
Python 有两个例程或功能,用于产生列表或有时产生一个整数范围。这些可以用于循环。我们正在谈论的这两个函数是 xrange 和 range。只有当你使用 Python 2.x 和 Python 3 时,range() 和 xrange() 的比较才有用。这是因为 Python 3.x 的 range() 方法只是重新实现了 Python 2.x 的 xrange() 方法。它的功能与 xrange 相同。就功能而言,xrange 和 range 基本上是一样的。它们都为你提供了生成一个整数列表的选择,你可以以任何方式使用它。除了 range 产生一个 Python list 对象,而 xrange 提供一个 xrange 对象外,Range 和 xrange 是相同的。我们在这节课中学习了range()和xrange。我们还包括了一些示例程序,向你展示如何将这些程序和方法用于你自己的实践。我们希望你觉得这篇文章对你有帮助。