2017-08-29 118 views
0

我通過我爲什麼不能這樣對待一個的xrange()對象作爲一個迭代器有點糊塗:的xrange VS迭代蟒蛇

In [47]: xr = xrange(1,7) 

In [48]: next(xr) 
----------------------------------------------------------------------- 
---- 
TypeError         Traceback (most recent call 
last) 
<ipython-input-48-e71cfa0995ec> in <module>() 
----> 1 next(xr) 

TypeError: xrange object is not an iterator 

它的工作原理,如果的xrange()被包裹在裏面ITER()。如果我在xr中進行循環,它也可以工作。如果xr不是迭代器,for循環如何被翻譯?

編輯:我看到了推薦的其他答案,但它仍然不清楚爲什麼xrange對象不能直接迭代。另一個答案提到xrange對象是不可變的,這是一個好處。但是,不可變的,不可直接迭代的是什麼?即使一個可迭代的對象對我來說似乎是不可改變的,所以範圍對象背後的好處或原因究竟是不是直接可迭代的呢?

+0

如果你可以調用'next',那麼這肯定意味着它有一個狀態。 'xrange'對象沒有狀態。 – SethMMorton

+0

問題:如果我做'a = xrange(10);在a中打印5,你會期望'print list(a)'的結果是什麼? – SethMMorton

回答