課程
/后端開發
/Python
/初識Python
L = xrange(1, 101)print sum([i*i for i in L])
這兩句怎么理解?
2016-04-04
源自:初識Python 7-2
正在回答
這個 range 和 xrange 是Python 2.x 中特有的一種東西,
先說 range: 在Python 2.x 中 range() 函數 會返回一個 列表, 這樣的話有一個缺點就是,當我們給range() 函數傳一個很大的參數時, 會返回一個很大的列表,這樣會消耗很大的內存,另外也降低了程序運行速度。
再來說 xrange:?在Python 2.x 中 xrange() 函數雖然用法和range()函數一樣, 但是它 返回的不是一個列表, 而是一個 xrange 對象, 這個對象其實就是一個 可迭代的生成器。 這樣說可能有點費解, 我們可以簡單的理解為, 調用xrange() 函數 不占用很大的內存, 但是它又能完成 range 在Python 中的 循環迭代工作。
題主也看出來了, 我在上面回答中,一直在強調 Python 2.x , 這是因為 在Python 3.x 中, 取消了 xrange() 函數,并且對range() 函數進行了升級, 在Python3.x 中 range () 具有了 Python 2.x 中 xrange() 的各種先進特性。 這也能看出來 ?Python 3.x 對于Python 2.x 的升級優化。
這兩個基本上都是在循環的時候用。[python] view plaincopyIn [1]: for i in range(0,10): ? ? ...: ? ? print i ? ? ...: ? ? ? 0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 ? ?In [2]: for i in xrange(0,10): ? ? ?print i ? ? ...: ? ? ? 0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 ?這兩個輸出的結果都是一樣的,實際上有很多不同,range會直接生成一個list對象:而xrange則不會直接生成一個list,而是每次調用返回其中的一個值【xrange返回的是一個生成器】。[python] view plaincopyIn [3]: a=range(0,100) ? ?In [4]: type(a) ?Out[4]: list ? ?In [5]: a=xrange(0,100) ? ?In [6]: type(a) ?Out[6]: xrange ? ?In [7]: print a[0],a[1] ?0 1 ?所以xrange做循環的性能比range好,尤其是返回很大的時候!盡量用xrange吧,除非你是要返回一個列表。
舉報
學python入門視頻教程,讓你快速入門并能編寫簡單的Python程序
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-04-04
這個 range 和 xrange 是Python 2.x 中特有的一種東西,
先說 range: 在Python 2.x 中 range() 函數 會返回一個 列表, 這樣的話有一個缺點就是,當我們給range() 函數傳一個很大的參數時, 會返回一個很大的列表,這樣會消耗很大的內存,另外也降低了程序運行速度。
再來說 xrange:?在Python 2.x 中 xrange() 函數雖然用法和range()函數一樣, 但是它 返回的不是一個列表, 而是一個 xrange 對象, 這個對象其實就是一個 可迭代的生成器。 這樣說可能有點費解, 我們可以簡單的理解為, 調用xrange() 函數 不占用很大的內存, 但是它又能完成 range 在Python 中的 循環迭代工作。
題主也看出來了, 我在上面回答中,一直在強調 Python 2.x , 這是因為 在Python 3.x 中, 取消了 xrange() 函數,并且對range() 函數進行了升級, 在Python3.x 中 range () 具有了 Python 2.x 中 xrange() 的各種先進特性。 這也能看出來 ?Python 3.x 對于Python 2.x 的升級優化。
2016-04-04
這兩個基本上都是在循環的時候用。
[python] view plaincopy
In [1]: for i in range(0,10): ?
? ...: ? ? print i ?
? ...: ? ? ?
0 ?
1 ?
2 ?
3 ?
4 ?
5 ?
6 ?
7 ?
8 ?
9 ?
?
In [2]: for i in xrange(0,10): ?
? ?print i ?
? ...: ? ? ?
0 ?
1 ?
2 ?
3 ?
4 ?
5 ?
6 ?
7 ?
8 ?
9 ?
這兩個輸出的結果都是一樣的,實際上有很多不同,range會直接生成一個list對象:
而xrange則不會直接生成一個list,而是每次調用返回其中的一個值【xrange返回的是一個生成器】。
[python] view plaincopy
In [3]: a=range(0,100) ?
?
In [4]: type(a) ?
Out[4]: list ?
?
In [5]: a=xrange(0,100) ?
?
In [6]: type(a) ?
Out[6]: xrange ?
?
In [7]: print a[0],a[1] ?
0 1 ?
所以xrange做循環的性能比range好,尤其是返回很大的時候!
盡量用xrange吧,除非你是要返回一個列表。