I'm trying to implement my own version of itertools.compress , the problem is that i stumbled upon the return type. I mean both of these functions return an iterator, but i think the second one is not considered a generator function because there is no yield statement inside. So my question is, are these two implementations equivalent ? def compress (seq, selectors): from operator import itemgetter fst = itemgetter (0) snd = itemgetter (1) yield from map (fst, filter (snd, zip (seq, selectors))) def compress (seq, selectors): from operator import itemgetter fst = itemgetter (0) snd =