Python 类中的方法可以是生成器吗?
在类中使用方法作为生成器是否可以接受/Pythonic?我发现的所有示例都在函数中显示了yield语句,而不是在类中 下面是一个示例工作代码:Python 类中的方法可以是生成器吗?,python,methods,generator,Python,Methods,Generator,在类中使用方法作为生成器是否可以接受/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 Som
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()
是的,这很正常。例如,它通常用于实现使对象成为可编辑的对象:
class SomeContainer(object):
def __iter__(self):
for elem in self._datastructure:
if elem.visible:
yield elem.value
然而,不要感到受这种共同模式的限制;任何需要迭代的方法都是生成器方法的候选方法。我想大多数示例都是函数,因为这样更简单;您不需要在类中,因此没有显示它。+1迭代器模式就是一个很好的例子。Mark Pilgrim涵盖了其中一些内容。如果您得到的是
TypeError:“SomeContainer”对象不是迭代器
,那么您可能正在尝试类似于sc=SomeContainer
的方法来获得每个值。相反,先做sc\u iter=iter(sc)
,然后再做next(sc\u iter)
。请参见()。您的意思是sc=SomeContajner()
,可能是:-)是的,SomeContainer()
实例是可编辑的,它们不是迭代器对象next()
需要迭代器,而iter()
从iterable生成iiterator。不同之处在于iterable可以生成任意数量的迭代器,但迭代器是一次性使用的。