Python 中错误 NameError: Name 'xrange' Is Not Defined
我们将了解在 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()
返回一个列表。
在 Python3 中,range()
函数返回一个 range()
对象,而在 Python2 中,range()
函数返回一个列表。 基本上,xrange()
是一个生成器,而 range()
在 Python3 中也是一个生成器。
现在让我们关注 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 中要快得多。
相关文章
Pandas DataFrame DataFrame.shift() 函数
发布时间:2024/04/24 浏览次数:133 分类:Python
-
DataFrame.shift() 函数是将 DataFrame 的索引按指定的周期数进行移位。
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
Pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:Python
-
Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。
Pandas 多列合并
发布时间:2024/04/24 浏览次数:628 分类:Python
-
本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。
Pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:Python
-
本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串