Python中的迭代器(iter())函数。

时间:2010-10-15 01:53:34

标签: python iterator

对于字典,我可以使用iter()来迭代字典的键。

y = {"x":10, "y":20}
for val in iter(y):
    print val

当我有如下的迭代器时,

class Counter:
    def __init__(self, low, high):
        self.current = low
        self.high = high

    def __iter__(self):
        return self

    def next(self):
        if self.current > self.high:
            raise StopIteration
        else:
            self.current += 1
            return self.current - 1

为什么我不能这样使用

x = Counter(3,8)
for i in x:
    print x

,也不

x = Counter(3,8)
for i in iter(x):
    print x

但这样呢?

for c in Counter(3, 8):
    print c

iter()功能的用途是什么?

ADDED

我想这可能是iter()的使用方式之一。

class Counter:
    def __init__(self, low, high):
        self.current = low
        self.high = high

    def __iter__(self):
        return self

    def next(self):
        if self.current > self.high:
            raise StopIteration
        else:
            self.current += 1
            return self.current - 1

class Hello:
    def __iter__(self):
        return Counter(10,20)

x = iter(Hello())
for i in x:
    print i

2 个答案:

答案 0 :(得分:16)

所有这些都很好,除了拼写错误 - 你可能意味着:

x = Counter(3,8)
for i in x:
    print i

而不是

x = Counter(3,8)
for i in x:
    print x

答案 1 :(得分:8)

我认为您的实际问题是print x

时的print i

iter()用于获取给定对象的迭代器。如果你有一个__iter__方法来定义它实际会做什么。在您的情况下,您只能在柜台上迭代一次。如果您定义__iter__以返回一个新对象,那么它将使您可以根据需要迭代多次。在你的情况下,Counter已经是一个迭代器,这就是回归自己的​​原因。