如果你想包装一个产生的方法,包装器方法是否也需要产生,或者返回就足够了?

时间:2013-11-21 10:16:22

标签: python dictionary iterator

如果我想在一个迭代器的字典上包装一个方法,只需返回原始函数调用(产生)就足够了,还是需要以更明确的方式传播yield?例如......

def iteritems(self):
    return self.__somedict.iteritems()

或者...

def iteritems(self):
    for k, v in self.__somedict.iteritems():
        yield k, v

2 个答案:

答案 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