如果我想在一个迭代器的字典上包装一个方法,只需返回原始函数调用(产生)就足够了,还是需要以更明确的方式传播yield?例如......
def iteritems(self):
return self.__somedict.iteritems()
或者...
def iteritems(self):
for k, v in self.__somedict.iteritems():
yield k, v
答案 0 :(得分:2)
一般情况下,除非您打算做一些额外的工作,否则不需要用yield包装它。例如。如果你想将每个值乘以2:
def times2iteritems(self):
#note: it is not necessary to use yield here
return ((k, v*2) for k, v in self.__somedict.iteritems())
这两个实现的区别在于,在第一种情况下,您将引用返回到迭代器,而在第二种情况下,您执行管道传输。
答案 1 :(得分:1)
如果你正在使用python 3,那么你可以使用yield from
。
请参阅this。