Python 3 中xrange的介绍及使用

914 阅读4分钟

Python 3 xrange

Python 3 xrange简介

Python 3 的 xrange 和 range 方法可以用来在 for 循环中迭代一定的次数。在 Python 3 中没有 xrange,尽管range 方法的操作与 Python 2 中的 xrange 类似。如果我们希望开发的代码能同时在 Python 2 和 Python 3 上运行,我们应该使用 range。这个函数返回一个只能循环显示数字的发生器对象。

什么是Python 3 xrange?

  • 只有在请求时才会显示特定的范围,这导致了 "懒惰评估 "这个术语。
  • 如果我们在Python 3和Python 2之间过渡,我们可以想象Python 2中的xrange对象和Python 3中的range对象几乎是一样的。是不是很可能他们只是把xrange改名为range。
  • xrange 函数比 Python 3 中的 range 函数更有约束性。
  • 当我们使用 help 函数询问 xrange 的文档时,我们得到了一个 dunder 方法的列表。当我们在不同的对象之间采用几个共享属性时,Python 使用 Dunder 方法,如 len 和 str 函数。
  • Xrange 是一个内置函数,可以在指定范围内生成整数或整数。如果我们同时使用3和2.x,那么range和xrange的对比就很有用。这是因为3.x的range方法只是对2.x的xrange的重新实现。它的工作方式与xrange类似。
  • Xrange返回一个懒惰地评估的序列对象。它的效率要高得多,因为它只是在需要时计算下一个值(通过xrange序列对象),而不是像range那样创建一个所有可能值的列表。
  • Range与xrange类似,它返回一个列表。如果我们需要生成列表,我们将不得不这样做。
  • Range取代了xrange,后者不再可用。我们不能用 xrange 来编写 Python 3 的代码。
  • xrange 类型的优点是总是使用相同的内存量,无论range 的大小将代表。
  • 这个函数返回一个生成器对象,只能循环显示数字。xrange函数在生成数字序列方面的工作与range函数相同。然而,只有Python 2.x使用xrange,而3.x使用range。

如何使用3的xrange?

1.在使用xrange函数时,我们需要指定函数的返回类型。

代码。

py = xrange(1,10000)
print ("Xrange return type: ")
print (type(py))

输出。

Python 3 xrange 1

2.当与存储由xrange创建的范围的变量相比。Range返回一个列表,而xrange返回一个xrange对象。

代码。

import sys
py = xrange(1,10000)
print ("Allocates size by using xrange:")
print (sys.getsizeof (py))

输出。

Python 3 xrange 2

3.Range产生一个列表,它可以被用于任何可以应用于列表的操作。然而,由于xrange返回一个xrange对象,与列表有关的操作不能在它身上执行。

代码。

py = xrange(1,6)
print ("List using xrange: ")
print (py[2:5])

输出。

Python 3 xrange 3

4.Xrange比range实现得更快,因为它只评估持有懒惰评估所需值的生成器对象。xrange函数在3中被弃用,如果我们希望开发的代码能在2和3上运行,我们应该使用range。如果我们在同一个序列上迭代几次,range会更快。Xrange每次被调用时都必须重建整数对象,而range将返回真正的整数对象。

函数

xrange函数的语法由3个参数组成。

语法。

xrange(start, end, step)
  • **开始。**这个参数表示应该开始的数字序列。
  • **结束。**这个参数表示数字序列将结束。
  • **步长。**这是函数中使用的步长参数。

必须定义结束的位置。在下面的例子中,我们已经定义了结束参数。

代码。

print ("End position\n")
py_end = 7
print ("Position:", py_end)
py = xrange(py_end)
print(py)
for py1 in py:
print (py1)

输出。

end parameter

在下面的例子中,我们用函数定义了开始、结束和步长参数,如下所示。

代码。

print("Start, End and Step parameter")
py1 = 2
py2 = 5
py3 = 2
print ("start pos:", py1)
print ("end pos:", py2)
print ("step:", py3)
py = xrange (5,13,2)
print (py)
for py4 in py:
print (py4)

输出。

defining the start, end and step parameters

NameError

Xrange错误信息似乎暗示我们正试图使用3来执行Python 2代码库。在Python 2中,xrange方法经常被用来生成一个可迭代的对象,它的行为就像一个发生器。Python 3中的range函数与xrange的方法类似,因此没有单独的xrange方法。因此,在 Python 3 中使用 xrange 会导致 NameError:名称。

下面是NameError的例子,如下所示。

在下面的例子中,我们正在使用没有定义的 "self",所以它将显示这个NameError消息,因为名字 "self没有定义"。

代码。

for py in xrange (self.epoch):
py1 = py*b_size
py2 = min((py+1)*b_size, d_size)
self.rank.append (np.asarray (self.t_rank [py1:py2]))

输出。

Python 3 xrange 6

结论

Python 3的xrange和range方法可以用来在for循环中迭代一定的次数。Python 3 中的 Range 取代了 xrange,后者已不再可用。我们不能用xrange来写3的代码。Xrange返回一个懒惰地评估的序列对象。