這兩個基本上都是在循環的時候用。
range函數傳回的是一個清單,而xrange傳回的是一個不可改變的XRangeType對象。這是一個疊代器,也就是隻有用到那個數時才臨時通過計算提供值。當參數很大時,xrange能夠有效地利用記憶體。
>>> rg = range(0,10)
>>> type(rg)
list
>>> for i in rg:
....: print i
....:
0
1
2
3
4
5
6
7
8
9
>>> xrg = xrange(0,10)
>>> type(xrg)
xrange
>>> for i in xrg:
....: print i
....:
0
1
2
3
4
5
6
7
8
9
>>> for i in range(10000000):
.... print i
由于list占用記憶體太大,系統無法配置設定足夠大的記憶體,執行會出錯
>>> for i in xrange(10000000):
... print i
1
2
...
10000000
是以xrange做循環的性能比range好,尤其是傳回很大的時候,所有如果不是非要獲得一個清單,應該盡量用xrange。
類似的還有f.readlines()和f.xreadlines()兩個函數。
其中f.readlines()讀取所有的行并傳回一個包含所有行的清單,而f.xreadlines函數傳回一個疊代器,每次疊代傳回檔案的一個新行。