将类中的方法用作生成器是否可接受/ Pythonic?我找到的所有示例都在函数中显示yield语句,而不是在类中。
以下是一个示例工作代码:
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()
答案 0 :(得分:18)
是的,这是完全正常的。例如,它通常用于实现object.__iter__()
method:
class SomeContainer(object):
def __iter__(self):
for elem in self._datastructure:
if elem.visible:
yield elem.value
然而,不要被这种常见模式所限制;任何需要迭代的东西都是生成器方法的候选者。
答案 1 :(得分:0)
正如Martijn已经写道:这是完全可以接受的。
一个方法只是一个“绑定函数”(在Python 2中它是一个简化 - 你可以在这个帖子中找到一个更详细的答案:What is the difference between a function, an unbound method and a bound method?)。