Jin*_*Jin 2 python iterator iterable
我正在阅读Bill Lubanovic的“ Python简介”,它说
像zip()一样,range()返回一个可迭代的对象,
但这不是不正确的说法吗?例如,
s= zip([1,2,3],['one','two','three'])
next(s)
>> (1,'one')
next(s)
>> (2,'two')
a = range(10)
next(a)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-54-7b3ad3809256> in <module>()
1 a = range(10)
----> 2 next(a)
TypeError: 'range' object is not an iterator
Run Code Online (Sandbox Code Playgroud)
从上面的代码中,我们可以检查zip()返回的是迭代器而不是可迭代的对象。
“迭代器”和“可迭代”不是一回事。所有迭代器都是可迭代的,但并非所有可迭代器都是迭代器。
可以将itera bles传递给它iter(),它返回itera tor。伊特拉职责范围可以传递到next(),而且还可以传递给iter(),其作为在这种情况下,恒等函数。
https://docs.python.org/glossary.html#term-iterable
一个能够一次返回其成员的对象。iterables的实例包括所有类型的序列(如
list,str,和tuple)和一些非序列类型,如dict,文件对象,你用定义任何类的对象__iter__()或__getitem__()方法。可可用于for循环以及需要序列的许多其他地方(zip(),map(),...)。将可迭代对象作为参数传递给内置函数时iter(),它将返回该对象的迭代器。此迭代器非常适合在一组值上传递一次。使用可迭代对象时,通常无需调用iter()或自己处理迭代器对象。for语句会自动为您执行此操作,并创建一个临时的未命名变量以在循环过程中保留迭代器。另请参见迭代器,序列和生成器。
https://docs.python.org/glossary.html#term-iterator
表示数据流的对象。重复调用迭代器的
__next__()方法(或将其传递给内置函数next())将返回流中的后续项。如果没有更多数据可用,StopIteration则会引发异常。此时,迭代器对象已用尽,对它的__next__()方法的任何进一步调用都将StopIteration再次引发。迭代器必须具有__iter__()返回迭代器对象本身方法,因此每个迭代器也是可迭代的,并且可以在接受其他可迭代的大多数地方使用。一个值得注意的例外是尝试多次迭代遍历的代码。每当您将其传递给容器对象(例如列表)时,都会产生一个新的迭代器iter()函数或在for循环中使用它。使用迭代器尝试执行此操作将仅返回上一次迭代过程中使用的相同的耗尽迭代器对象,使其看起来像一个空容器。
| 归档时间: |
|
| 查看次数: |
700 次 |
| 最近记录: |