在Python for loop
在for循環中使用range()時,列表實例化的過程是什麼?
for x in range(100):
print x
使用時,我想了解一下該range()
功能範圍是否進入循環前初始化整個國際熱核實驗堆能夠名單還是足夠聰明,因爲它增加產生的價值?
換句話說,如果我說的。會有像這樣的很大範圍的開銷嗎?
for x in range(1000**1000):
value = x
在Python for loop
在for循環中使用range()時,列表實例化的過程是什麼?
for x in range(100):
print x
使用時,我想了解一下該range()
功能範圍是否進入循環前初始化整個國際熱核實驗堆能夠名單還是足夠聰明,因爲它增加產生的價值?
換句話說,如果我說的。會有像這樣的很大範圍的開銷嗎?
for x in range(1000**1000):
value = x
In Python 3, range產生一個「不可改變的序列」,而不是發電機或迭代
In Python 2, range生成列表的Python 2還具有xrange使對象,其是一種「不透明序列」,其幾乎沒有內存開銷,但xrange
不可在Python 3
在有任何疑問時,很容易檢查。在IDLE中(例如使用Python 3.3):
>>> r = range(10)
>>> print(r)
range(0, 10)
>>> print(list(r))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
是的!如果使用range()
,python會在進入循環之前初始化整個iter-able列表。但是有一個簡單的方法可以使用xrange()
來克服這個開銷,隨着它的增加它會生成值。這可以被驗證爲:
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> xrange(10)
xrange(10)
不在Python 3中。 – rightfold 2014-11-08 23:10:02
在哪個目錄/文件,我可以看到的範圍()的實現?我想了解Python如何工作,但我不知道從哪裏開始閱讀代碼。 – Matt 2014-11-08 23:15:14
@馬特,你可以看到它[這裏](https://hg.python.org/cpython/file/tip/Objects/rangeobject.c)爲CPython的執行 – jonrsharpe 2014-11-09 09:18:29
@DSM指出,由於 – jonrsharpe 2014-11-09 09:21:56