■
と言うわけでリスト系基本関数三種をジェネレータのように振る舞うようにしてみた。
def mapYield(collection,fn=lambda x:x): for item in collection: yield fn(item) def filterYield(collection,fn=lambda x:True): for item in collection: if fn(item): yield item def reduceYield(collection,fn=lambda x,y:x+y,start=None): for item in collection: if start==None: start = item continue else: start = fn(start,item) yield start for ii in reduceYield(range(10),lambda x,y:x+y): print ii for ii in mapYield(range(10),lambda x:x*2): print ii for ii in filterYield(range(10),lambda x:x%2): print ii
reduceだけ長くなったな。