一、xrange是什麼?
xrange是python3中的range函數的祖宗,它的作用與range函數類似,都是生成一個整數序列。但是,xrange對象不是生成一個完整的序列,而是在需要時生成,不會浪費內存,因而可以應用於特別大的範圍,應用更為廣泛。
在Python3中,range函數的返回值是一個range對象,相對於Python2中的列表,range對象更省內存。Python3還為我們提供了新的關鍵字yield from可以自動處理嵌套循環,此時的range就成為了xrange,起到一定的優化作用。
二、xrange的優點
xrange的優點在於它的「懶惰性」,相比於range函數,它在需要時才會生成數據,而不是一次生成完整的數據序列。這個「懶惰性」可以減小內存消耗,在特別大的運算時非常有效。舉個例子:
a = range(10000000000) # 在Python2中會立即生成一個存儲1~10000000000的列表對象 b = xrange(10000000000) # 在Python2中不會立即生成列表,只是在需要獲取數據時才開始生成
在使用for循環時,range會一次性生成一個10000000000個元素的列表,而xrange只會在每次循環時生成一個元素,此時佔用的內存最多只有一個元素。
三、xrange與range的區別
其實,在Python3中已經將xrange和range合併為同一個函數range,但是,我們還是可以通過import函數來使用Python2時代的xrange。
由於Python3中的range性能優化,xrange與range之間的效率差距已經縮小了很多。所以在絕大部分情況下,range可以完全滿足我們的需求。但是,在處理數據量非常大的情況下,xrange仍然有其不可替代的優勢。
四、xrange的使用方法
使用方法與range類似,只需要調用xrange()函數即可。如下所示:
for i in xrange(10): print(i)
以上是最基本,最常用的用法,當然,xrange還有很多高級用法,比如,可以指定步長、指定起始值和結束值、倒序循環等等。下面是一些常見的高級用法:
五、xrange的高級用法
1、指定起始值和結束值
指定起始值和結束值只需要在xrange()函數的參數中指定即可,語法如下:
xrange(start, stop)
start表示起始值,stop表示結束值,生成的序列是[start, stop)。
for i in xrange(2, 8): print(i)
以上代碼輸出2到7之間的整數。
2、指定步長
我們也可以指定步長,語法如下:
xrange(start, stop, step)
step表示步長,生成的序列是[start, stop)之間以步長step遞增的整數序列。
for i in xrange(0, 10, 2): print(i)
以上代碼輸出0到8之間,步長為2的整數序列。
3、倒序循環
我們也可以用xrange實現倒序循環,語法如下:
for i in xrange(stop-1, start-1, -1): print(i)
這裡stop-1是因為xrange生成的序列是[start, stop)。start-1是因為我們想要的是[start, stop]。當然,如果不止想要[start, stop],而是想要[start, stop]之間步長為step的整數序列,代碼可以改寫為:
for i in xrange(stop-1, start-1, -step): print(i)
六、xrange與range的適用場景
在絕大部分情況下,range就可以完全滿足我們的需求,xrange並不是必須使用的。當然,在特別大的運算時,xrange的優勢非常明顯。通過本文的介紹,我們可以更好地了解range和xrange的差異,選擇更合適的函數,提高代碼的執行效率。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/237134.html