关于python:类中的方法可以是生成器吗?

Can a method within a class be generator?

使用类中的方法作为生成器是可以接受的吗?我找到的所有示例都在函数中显示yield语句,而不是在类中。

下面是一个工作代码示例:

1
2
3
4
5
6
7
8
9
10
class SomeClass(object):
    def first_ten(self):
        for i in range(10):
            yield i

    def test(self):
        for i in self.first_ten():
            print i

SomeClass().test()


是的,这是完全正常的。例如,它通常用于实现object.__iter__()方法:

1
2
3
4
5
class SomeContainer(object):
    def __iter__(self):
        for elem in self._datastructure:
            if elem.visible:
                yield elem.value

但是,不要觉得受这个公共模式的限制;任何需要迭代的东西都是生成器方法的候选者。


正如玛蒂金所写:这是完全可以接受的。

一个方法只是一个"绑定函数"(在python 2中,它是一个简化——在这个线程中,您可能会发现一个更详细的答案:函数、未绑定方法和绑定方法之间的区别是什么?).