當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。