内置容器的迭代器

时间:2015-10-17 12:32:03

标签: python python-3.x iterator containers

根据我的理解,您可以通过简单地定义两者 import java.util.Scanner; public class NamaNilaiMaksimum { public static void main(String[] args) { Scanner in = new Scanner(System.in); String name[] = new String[6]; int number[] = new int[6]; int max = 0, largest = 0; int as = 5; for (int x = 1; x <= as; x++) { System.out.print(" Name & number : "); name[x] = in.nextLine(); number[x] = in.nextInt(); } for (int x = 1; x <= as; x++) { if (number[x] > largest) { largest = number[x]; } } System.out.println("Result = " + largest); } } 方法和{{}来轻松地为用户定义的对象创建迭代器1}}方法。这很容易理解。

我也知道你可以通过简单地调用该容器上的__iter__方法为任何内置容器手动构建迭代器。

基本上以任何容器为例,我不明白为什么他们不为自己定义__next__方法。相反,当在容器(ergo,iter())上调用__next__方法时,它返回类型为iter的新对象,而不是容器本身。

最后,问题是,为什么容器对象将<container>.__iter__功能委托给单独的<container_type>_iterator对象而不是自己定义?

1 个答案:

答案 0 :(得分:9)

如果容器是它自己的迭代器(例如提供了__next__方法),那么你只能在一个地方迭代 。你不可能有独立的迭代器。每次调用__next__都会给出容器中的下一个值,而您无法返回第一个值;你实际上只有一次只能在容器中产生值的生成器。

通过为给定容器创建单独的迭代器,您可以独立迭代:

>>> lst = ['foo', 'bar', 'baz']
>>> it1 = iter(lst)
>>> it2 = iter(lst)
>>> next(it1)
'foo'
>>> next(it2)
'foo'
>>> list(it1)
['bar', 'baz']
>>> next(it2)
'bar'