itr1 = iter(mylist)
itr2 = iter(mylist)
x = next(itr1) # First item of mylist
y = next(itr1) # Second item of my list
z = next(itr2) # First item of mylist, not the third
但是,文件句柄充当它们自己的迭代器:
>>> f = open('.bashrc')
>>> id(f)
4454569712
>>> id(iter(f))
4454569712
iter
的意义在于它允许您从iterable对象获取迭代器并自己使用它,或者实现您自己的for
循环的变体,或者在多个循环中保持迭代的状态。一个小例子:这个分组习惯用法提供了
^{pr2}$iter
的更高级用法:除了使用
iter
为实现__iter__
方法的对象显式获取迭代器之外,iter
还有一种鲜为人知的双参数形式,它使迭代器重复调用函数,直到返回给定的sentinel值。在前面的代码将调用
^{pr2}$f.read
(例如,一个打开的文件句柄f
),直到它读取由字符串EOF
组成的行。这和写作差不多此外,迭代器可能是一个不同于它所迭代的对象的对象。这对于
list
类型是正确的。这意味着您可以创建两个迭代器,两个迭代器都独立地在同一个对象上迭代。在但是,文件句柄充当它们自己的迭代器:
通常,
iter
返回的对象依赖于对象类型实现的__iter__
方法。在当您对一个变量执行
for
循环时,它隐式调用您实际传递的iterable的__iter__
方法。{你总是在使用循环列表。。。所有的一切。在
我想这个字节码的摘录可以让你相信:
但是,iterables还允许您在Python中执行其他一些操作,例如使用
next()
进入iterable,或者引发一个{a1}。如果您要处理不同的对象类型,并且希望应用泛型算法,那么它非常有用。相关问题 更多 >
编程相关推荐