2010-08-04 :-)
_ 朝ッ
0520 起床
_ ,
@mizchi が居た聖剣伝説 LoM
_ 汝
いまなんじ?
_ [Python][デザインパターン][Iterator]Python でデザインパターン - Iterator
書き換え [ 20090512#p07 ]
Python で Iterator を実装するにはイテレータを使う方法とジェネレータを使う方法があるようだ。ジェネレータならば yield するだけなのでこれは Ruby に近い書き方になるのか。
イテレータ版
#!/usr/bin/python # -*- coding: utf-8 -*- # Head First デザインパターンを写経する - 9章 Iterator パターン - ヨタの日々(2009-05-12) # http://www.area51.gr.jp/~rin/diary/?date=20090512#p07 # イテレータ版 class Menu: def __init__(self, item): self.item = item self.count = len(item) def __iter__(self): return self def next(self): if self.count == 0: raise StopIteration i = len(self.item) - self.count self.count -= 1 return self.item[i] def main(): menuItems = [ "K&Bのパンケーキ朝食", "通常のパンケーキ朝食", "ワッフル"] menu = Menu(menuItems) for n in menu: print n main()
ジェネレータ版
#!/usr/bin/python # -*- coding: utf-8 -*- # Head First デザインパターンを写経する - 9章 Iterator パターン - ヨタの日々(2009-05-12) # http://www.area51.gr.jp/~rin/diary/?date=20090512#p07 # ジェネレータ版 def menu(item): for index in range(len(item)): yield item[index] def main(): menuItems = [ "K&Bのパンケーキ朝食", "通常のパンケーキ朝食", "ワッフル"] for n in menu(menuItems): print n main()
実行結果は両方ともこう
K&Bのパンケーキ朝食 通常のパンケーキ朝食 ワッフル
ref.
[ツッコミを入れる]