for i in range(0, 1000): print i
for i in xrange(0, 1000): print i到底range()和xrange()有什麽差呢? 其實上面這兩個例子跑出來結果是一模一樣
最主要差別是range()會產生實際的list,而xrange()則是產生一個number generator
>>> range(5) [0, 1, 2, 3, 4] >>> xrange(5) xrange(5) >>> list(xrange(5)) [0, 1, 2, 3, 4]range因為會產生實際list,因此當用在迴圈長度很大的時候,會佔掉很大一塊記憶體
for x in range(1, 1000000):
(range會產生一個1~1000000的list)
for x in xrange(1, 1000000):
相反地,因為xrange是產生一個1~1000000的number generator並每次回傳一個值給迴圈,在這個例子會比range()來的節省記憶體
因此建議在大範圍的迴圈盡量使用xrange(),除非你真的要產生一個list
當然有些例外,range()會比xrange來的好
比如說,當迴圈每次都固定會執行一個範圍時(不會中途break),使用range()會比xrange()來的有效率,因為不用每次都生成一個number(當然,記憶體一定是range使用的比較多)
另外當你真的需要list的時候,就只能使用range()
沒有留言:
張貼留言