range() 和 xrange() 是两个函数,可用于在为了Python 中的循环。在Python3,没有 xrange,但 range 函数的行为类似于 Python2 中的 xrange。如果您想编写可在 Python2 和 Python3 上运行的代码,则应使用range()。两者都以不同的方式实现,并且具有不同的相关特征。比较的要点是:
- 返回类型
- Memory
- 操作使用
- Speed
Pythonrange()函数
range()返回给定范围内的数字序列。它最常见的用途是使用 Python 循环对数字序列进行迭代。
Pythonxrange()函数
Python中的xrange()函数用于生成数字序列,类似于Python的range()函数。 Python xrange() 仅在 Python 2.x 中使用,而 Python 中的 range() 函数在 Python 3.x 中使用。
range() 与 xrange() 中的返回类型
这xrange()函数返回生成器对象只能通过循环来显示数字。唯一的特定范围是根据需要显示的,因此称为“惰性评估“,而在 Python 中 range() 函数返回一个范围对象(可迭代的类型)。
Python3
# initializing a with range()
a = range(1, 10000)
# initializing a with xrange()
x = xrange(1, 10000)
# testing the type of a
print("The return type of range() is : ")
print(type(a))
# testing the type of 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()创建需要更多内存与使用 xrange() 存储范围的变量相比。其基本原因是range()的返回类型是列表,而xrange()是xrange()对象。
Python3
import sys
# initializing a with range()
a = range(1,10000)
# initializing a with xrange()
x = xrange(1,10000)
# testing the size of a
# range() takes more memory
print ("The size allotted using range() is : ")
print (sys.getsizeof(a))
# testing the size of x
# xrange() takes less memory
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
xrange()和range()函数的操作使用
range() 返回列表,其中包含所有操作能够可以应用到列表上就可以使用了。另一方面,当 xrange() 返回 xrange 对象时,与列表关联的操作不能应用于它们,因此是一个缺点。
Python3
# initializing a with range()
a = range(1,6)
# initializing a with xrange()
x = xrange(1,6)
# testing usage of slice operation on range()
# prints without error
print ("The list after slicing using range is : ")
print (a[2:5])
# testing usage of slice operation on xrange()
# raises error
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 :
Python 中 range() 和 xrange() 之间的区别
由于 xrange() 仅评估生成器对象,该对象仅包含延迟评估所需的值,因此是快点在实施中比range()。
要点:
- 如果您想编写可在 Python 2 和 Python 3 上运行的代码,请使用 range(),因为 xrange 函数在 Python 3 中已弃用。
- 如果多次迭代同一序列,range() 会更快。
- xrange()每次都必须重建整数对象,但range()将拥有真正的整数对象。 (然而,它在 memory 方面总是表现得更差)
range() |
xrange() |
---|---|
返回整数列表。 | 返回一个生成器对象。 |
执行速度较慢 | 执行速度更快。 |
占用更多内存,因为它将整个元素列表保留在内存中。 | 占用更少的内存,因为它一次只在内存中保留一个元素。 |
当它返回一个列表时,可以执行所有算术运算。 | 无法对xrange()执行此类操作。 |
在 python 3 中,不支持xrange()。 | 在 python 2 中,xrange() 用于在 for 循环中进行迭代。 |
相关用法
- Python range() vs xrange()用法及代码示例
- Python range()用法及代码示例
- Python range用法及代码示例
- Python range构造函数用法及代码示例
- Python random randrange()用法及代码示例
- Python random.seed( )用法及代码示例
- Python random.sample()用法及代码示例
- Python randint()用法及代码示例
- Python randrange()用法及代码示例
- Python random.setstate()用法及代码示例
- Python random.getstate()用法及代码示例
- Python random.getrandbits()用法及代码示例
- Python random.random()用法及代码示例
- Python random.weibullvariate()用法及代码示例
- Python random.expovariate()用法及代码示例
- Python random.lognormvariate()用法及代码示例
- Python random.gauss()用法及代码示例
- Python random.normalvariate()用法及代码示例
- Python random.paretovariate()用法及代码示例
- Python random.vonmisesvariate()用法及代码示例
- Python random.gammavariate()用法及代码示例
- Python random.shuffle()用法及代码示例
- Python random.triangular()用法及代码示例
- Python random.betavariate()用法及代码示例
- Python random.gammavariate用法及代码示例
注:本文由纯净天空筛选整理自佚名大神的英文原创作品 range() vs xrange() in Python。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。