【Python 中的 range() 与 xrange()】

简介: **range() 和 xrange() 是两个函数,**可用于在 Python的 for 循环中迭代一定次数。在 Python 3 中,没有 xrange,但 range 函数的行为类似于 Python 2 中的 xrange。如果要编写可在 Python 2 和 Python 3 上运行的代码,则应使用 range()。

**range() 和 xrange() 是两个函数,**可用于在 Python的 for 循环中迭代一定次数。在 Python 3 中,没有 xrange,但 range 函数的行为类似于 Python 2 中的 xrange。如果要编写可在 Python 2 和 Python 3 上运行的代码,则应使用 range()。


range() – 这将返回一个范围对象(一种可迭代的类型)。

xrange() – 此函数返回生成器对象,该生成器对象只能通过循环来显示数字。唯一的特定范围是按需显示的,因此称为“惰性评估”。


两者都以不同的方式实现,并具有与之相关的不同特征。比较点如下:


返回类型

记忆

操作使用

速度


返回类型


range() 返回 -范围对象。

xrange() 返回 – xrange() 对象。

# 基于返回类型演示 range() 与 xrange() 的 Python 代码
# 用 range() 初始化 a
a = range(1,10000)
# 用 xrange() 初始化 a
x = xrange(1,10000)
# 测试 a 的类型
print ("The return type of range() is : ")
print (type(a))
# 测试 x 的类型
print ("The return type of xrange() is : ")
print (type(x))

输出:

The return type of range() is : 
<type 'list'>
The return type of xrange() is : 
<type 'xrange'>


记忆


与使用 xrange() 存储范围的变量相比,存储由range () 创建的范围的变量占用更多内存。 其基本原因是 range() 的返回类型是 list 而 xrange() 是 xrange() 对象。

# 基于内存演示 range() 与 xrange() 的 Python 代码
import sys
# 用 range() 初始化 a
a = range(1,10000)
# 用 xrange() 初始化 a
x = xrange(1,10000)
# 测试 range() 的大小需要更多内存
print ("The size allotted using range() is : ")
print (sys.getsizeof(a))
# 测试 x xrange() 的大小占用更少的内存
print ("The size allotted using xrange() is : ")
print (sys.getsizeof(x))

输出:

The size allotted using range() is : 
80064
The size allotted using xrange() is : 
40


操作使用


由于 range() 返回列表,因此可以在列表上应用的所有操作都可以在其上使用。另一方面,由于 xrange() 返回 xrange 对象,与 list 关联的操作不能应用于它们,因此是不利的。

# 根据操作使用情况演示 range() 与 xrange() 的 Python 代码
# 用 range() 初始化 a
a = range(1,6)
# 用 xrange() 初始化 a
x = xrange(1,6)
# 在 range() 打印上测试 slice 操作的使用没有错误
print ("The list after slicing using range is : ")
print (a[2:5])
# 在 xrange() 上测试切片操作的使用会引发错误
print ("The list after slicing using xrange is : ")
print (x[2:5])

错误:

Traceback (most recent call last):
  File "1f2d94c59aea6aed795b05a19e44474d.py", line 18, in 
    print (x[2:5])
TypeError: sequence index must be integer, not 'slice'

输出:

The list after slicing using range is : 
[3, 4, 5]
The list after slicing using xrange is : 

Speed


由于 xrange() 仅评估仅包含惰性评估所需值的生成器对象,因此在实现上比 range()更快。

要点:


如果您想编写可在 Python 2 和 Python 3 上运行的代码,请使用 range(),因为 xrange 函数在 Python 3 中已弃用。


如果多次迭代相同的序列,range() 会更快。

xrange() 每次都必须重建整数对象,但 range() 将具有真正的整数对象。(然而,它在内存方面的表现总是更差)

range() xrange()
返回整数列表。 返回一个生成器对象。
执行速度较慢 执行速度更快。
占用更多内存,因为它将整个元素列表保留在内存中。 占用更少的内存,因为它一次只在内存中保留一个元素。
所有算术运算都可以在返回列表时执行。 此类操作不能在 xrange() 上执行。
在 python 3 中,不支持 xrange()。 在 python 2 中,xrange() 用于迭代 for 循环


相关文章
|
7月前
|
JavaScript 前端开发 测试技术
[小笔记]TypeScript/JavaScript模拟Python中的Range函数
[小笔记]TypeScript/JavaScript模拟Python中的Range函数
73 0
|
1月前
|
Python
Python中的`range`函数与负增长
在Python中,`range`函数用于生成整数序列,支持正向和负向增长。本文详细介绍了如何使用`range`生成负增长的整数序列,并提供了多个实际应用示例,如反向遍历列表、生成倒计时和计算递减等差数列的和。通过这些示例,读者可以更好地掌握`range`函数的使用方法。
47 5
|
2月前
|
存储 Python
[oeasy]python038_ range函数_大小写字母的起止范围_start_stop
本文介绍了Python中`range`函数的使用方法及其在生成大小写字母序号范围时的应用。通过示例展示了如何利用`range`和`for`循环输出指定范围内的数字,重点讲解了小写和大写字母对应的ASCII码值范围,并解释了`range`函数的参数(start, stop)以及为何不包括stop值的原因。最后,文章留下了关于为何`range`不包含stop值的问题,留待下一次讨论。
27 1
|
存储 Python
Python 教程之控制流(5)Python 中的 range() 与 xrange()
Python 教程之控制流(5)Python 中的 range() 与 xrange()
60 0
|
5月前
|
存储 索引 Python
【Python】已解决:IndexError: list index out of range
【Python】已解决:IndexError: list index out of range
492 1
|
6月前
|
Python
在Python中,`range()`函数生成一个整数序列,用于循环迭代。
【6月更文挑战第19天】`Python`的`range()`函数生成整数序列,用于迭代。它接受`start`(默认0)、`stop`(不包含,右开)和`step`(默认1)参数。在`for`循环中,`range(5)`会输出0到4。若要包含结束值,需将`stop`设为`end+1`,如`range(1, 6)`将输出1到5。
85 1
|
7月前
|
索引 Python
【Python 基础】解释Range函数
【5月更文挑战第6天】【Python 基础】解释Range函数
|
7月前
|
存储 索引 Python
【Python21天学习挑战赛】-列表 & 元组 & range
【Python21天学习挑战赛】-列表 & 元组 & range
|
7月前
|
Python
python学习4-内置函数range()、循环结构、循环控制语句、else语句、嵌套循环
python学习4-内置函数range()、循环结构、循环控制语句、else语句、嵌套循环
|
7月前
|
Python
04-python的循环语句-while循环/for循环/range语句/continue语句/break语句/99乘法表/计算指定数字内的偶数个数/随机猜数字/求100以内的数字之和
04-python的循环语句-while循环/for循环/range语句/continue语句/break语句/99乘法表/计算指定数字内的偶数个数/随机猜数字/求100以内的数字之和