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:??每一个迭代器是迭代的,是的 –