2
A
回答
3
列表是迭代。你可以通過調用iter(iterable)
爲它們生成一個迭代器。
沒有包含迭代器和排除生成器的特殊術語。
準確定義見Python glossary,iterator,iterable和generator。
例如,發生器條目包括:
其返回迭代的函數。
這是很常見的使用生成函數來實現迭代器的迭代,通過實施object.__iter__
:
class SomeContainer(object):
def __iter__(self):
for elem in self._datastructure:
if elem.visible:
yield elem.value
所以SomeContainer
實例是迭代(就像名單),iter(iterable)
產生一個迭代器,其中恰好是一個發生器對象。
2
列表不是迭代器。列表是可疑錯誤,當你調用iter(somelist)
它會產生一個迭代器。什麼樣的迭代器產生取決於所討論的Iterable,列表中的一個是相當充分的名稱列表。
任何生成器都是迭代器。
任何迭代器是一個可迭代(嘗試iter(iter(somelist))
沒有任何可迭代(列表,例如)是一個迭代器,但是當你調用iter(someiterable)
或someiterable.__iter__()
可迭代返回一個Iterator
編輯:這裏是一個短( Python 3中)例如:
>>> import collections
>>> import random
>>>
>>> class MyIterable:
... def __iter__(self):
... return MyIterator()
>>>
>>> class MyIterator:
... def __next__(self):
... return random.randint(-10, 10)
... def __iter__(self):
... return self
...
>>> mable = MyIterable()
>>> mitor = iter(mable)
>>> isinstance(mable, collections.Iterable)
True
>>> isinstance(mable, collections.Iterator)
False
>>> isinstance(mitor, collections.Iterable)
True
>>> isinstance(mitor, collections.Iterator)
True
>>> next(mitor)
-7
>>> next(mitor)
-3
>>> next(mitor)
-3
>>> next(mitor)
7
>>> next(mable)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'MyIterable' object is not an iterator
相關問題
- 1. 「非AJAX」請求的正確術語是什麼?
- 2. 什麼是正確的術語來描述project.clj和core.clj中發生了什麼?
- 3. PHP中「 - >」語法的正確術語是什麼?
- 4. 什麼是python生成器?
- 5. 爲什麼我的生成器實現在Python中不正確?
- 6. 在查詢中標記表的正確術語是什麼?
- 7. 什麼是非阻塞生成器
- 8. CIL中沒有運行代碼的正確技術術語是什麼?
- 9. 固定大小的FIFO隊列的正確術語是什麼?
- 10. 生成dmp時,術語偏移的含義是什麼
- 11. 什麼是「 - >」的正確術語,即$ class-> method()
- 12. 描述RFID卡掃描動作的正確術語是什麼?
- 13. XML元素的正確術語是什麼?
- 14. HTTP/REST/Web API的正確術語是什麼?
- 15. 引用路徑和文件名的正確術語是什麼?
- 16. 將URI分解爲其組成部分的正確術語是什麼?
- 17. 什麼是WordPress的術語
- 18. 什麼是正確的語法jQuery中
- 19. 非順序隨機數字發生器(不確定的術語)
- 20. 自動生成的方法或變量的正確術語?
- 21. 列表中生成的數據的正確HTML語義標記是什麼?
- 22. 具體確定項目順序的順序的正確術語是什麼?
- 23. 在python中派生類方法的正確方法是什麼?
- 24. 什麼是Z3術語
- 25. 正確的編譯器術語
- 26. SOLR術語中的文檔是什麼?
- 27. 什麼是正確的PDO的語法
- 28. 正確的術語來正確搜索
- 29. REALM術語在安全性中的確切用途是什麼?
- 30. 什麼是CMake生成器?
會發電機對象也是一個迭代的話,因爲它有一個'__iter__'功能,併產生一個迭代還是我犯了這個錯誤 – Xiphias
@Xiphias:??每一個迭代器是迭代的,是的 –