当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python range() vs xrange()用法及代码示例


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

range()-这将返回使用range()函数创建的数字列表。
xrange()-此函数返回只能通过循环显示数字的生成器对象。根据需要仅显示特定范围,因此称为“惰性评估”。

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


  • 返回类型
  • memory
  • 操作用法
  • 速度
返回类型

range()返回-作为返回类型的列表。 xrange()返回-xrange()对象。

# Python code to demonstrate range() vs xrange() 
# on  basis of return type 
  
# 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:

The return type of xrange() is:

memory

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

# Python code to demonstrate range() vs xrange() 
# on  basis of memory 
  
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 a 
# range() 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

操作用法

当range()返回列表时,可以在列表上应用所有可以应用于列表的操作。另一方面,由于xrange()返回xrange对象,因此与list相关的操作无法应用于它们,因此是不利的。

# Python code to demonstrate range() vs xrange() 
# on  basis of operations usage  
  
# 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:

速度

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

重要事项:

  • 如果要编写可在Python 2和Python 3上运行的代码,请使用range(),因为Python 3中不推荐使用xrange函数
  • 如果多次遍历同一序列,则range()会更快。
  • xrange()每次都必须重建整数对象,但是range()将具有真实的整数对象。 (但是,在内存方面,它总是会表现得更差)


相关用法


注:本文由纯净天空筛选整理自 range() vs xrange() in Python。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。