迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 中错误 NameError: Name 'xrange' Is Not Defined

作者:迹忆客 最近更新:2023/05/30 浏览次数:

我们将了解在 Python3 中调用 xrange() 函数时出现错误的原因,并了解如何解决此问题。 我们还将了解 range()xrange() 之间的区别,并了解如何在不同的 Python 版本中使用 range() 函数。


在Python3使用 xrange() 时出现NameError: name 'xrange' is not defined 错误

你可能知道,从 Python2 到 Python3 的过渡很大一部分是 Python3 中不再存在 xrange() 函数。 我们将并排使用 Python2 和 Python3 并比较它们,看看两个版本的 Python 中 range()xrange() 之间的区别。

首先,我们将使用可以使用 xrange() 函数的 Python2 环境,但是 Python2 环境也有 range() 函数。 我们将看到这些函数的行为略有不同; xrange() 返回一个 xrange() 对象,而 range() 返回一个列表。

Python2 Use xrange and range - Output

在 Python3 中,range() 函数返回一个 range() 对象,而在 Python2 中,range() 函数返回一个列表。 基本上,xrange() 是一个生成器,而 range() 在 Python3 中也是一个生成器。

Python3 Use range - Output

现在让我们关注 Python2。 我们首先要检查一下这个 xrange() 对象。

我们将查看它的类型以及是否有 xrange 对象。

type(xrange(6))

输出

<type 'xrange'>

接下来,我们将看看如果我们用一个列表包裹它会发生什么。

list(xrange(6))

输出

[0, 1, 2, 3, 4, 5]

现在,我们将 xrange(6) 分配给一个名为 a 的变量,创建一个 range() 对象并将其分配给 b 变量。 我们将导入 sys 以获得 a 和 b 的大小。

当我们在 Python shell 中运行这段代码时,我们应该注意到两个变量大小之间存在很大差异。

>>> import sys
>>> a=xrange(6)
>>> b=range(6)
>>> sys.getsizeof(a)
32
>>> sys.getsizeof(b)
112

xrange() 对象的大小比 range() 小,这就是 xrange()range() 快的原因。

由于执行速度较快,初学者通常会尝试使用Python3中的 xrange() 函数并得到一个错误(name 'xrange' is not defined),因为Python3不支持 xrange() 函数。

# in python 3
xrange(6)

输出:

NameError: name 'xrange' is not defined

在 Python3 中,xrange() 对象变成了 range() 对象。

# in python 3
>>> range(6)
range(0, 6)

让我们导入 sys 来查看 Python3 中 list 和 range() 对象的大小。

# in python 3
>>> a=range(6)
>>> b=[0,1,2,3,4,5]
>>> import sys
>>> sys.getsizeof(a)
48
>>> sys.getsizeof(b)
152

我们得到了 48 个,这与列表更具可比性。 您可以看到 Python2 中的 xrange() 和 Python3 中的 range() 可能会以相似的速度运行并占用相似的内存空间。

在 Python3 环境中,我们不能使用 xrange() 函数,因为正如我们所说,xrange() 不再存在; 它从未被制作成 Python3。 我们可以使用 range() 函数而不是 xrange() 因为 range() 函数在 Python3 中要快得多。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Python 错误 Valueerror: Expected 2d Array, Got 1d Array Instead

发布时间:2023/05/30 浏览次数:103 分类:Python

当我们在 numpy 中传递一维数组而不是二维数组时,会发生错误 ValueError: Expected 2D array, got 1D array instead 。如您所知,每种编程语言都会遇到很多错误,有些是在运行时,有些是在编译时。 Pyth

Python 中错误 ValueError: Invalid Literal for Float()

发布时间:2023/05/17 浏览次数:55 分类:Python

Python 中 ValueError: invalid literal for float()。 float() 函数无法将字符串类型转换为浮点数。 相反,它会抛出一个 ValueError,它可能会因您的 Python 版本而异。

Python 错误 TypeError: Unhashable Type: List

发布时间:2023/05/17 浏览次数:112 分类:Python

本文将讨论 TypeError: unhashable type: 'list' 以及如何在 Python 中修复它。因为 Python 字典只接受可散列数据类型作为它们的键,而列表是不可散列的。

Python 中错误 AttributeError: __Exit__

发布时间:2023/05/17 浏览次数:117 分类:Python

尝试用 Python 开发新程序时出错是很常见的。 AttributeError 是 Python 中最常见的错误之一。在本文中,我们将看看如何解决这个 AttributeError: __exit__ 错误,并且我们将通过相关示例和解释来讨论这

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便