Presentation is loading. Please wait.

Presentation is loading. Please wait.

君ならどうする – ls-lRシェル Python編

Similar presentations


Presentation on theme: "君ならどうする – ls-lRシェル Python編"— Presentation transcript:

1 君ならどうする – ls-lRシェル Python編
Template Method Composite cmd.Cmd Iterator LsShell Directory LSLoader Builder File PredBuilder Interpreter cmd.Cmd Python標準モジュール。シェルのような対話型アプリケーション用のフレームワーク。 LsLoader ls –lRの出力を読み込み、Directory/Fileオブジェクトを構築する。 LsShell cmd.Cmdを基底クラスとしたls-lRシェルの本体。 Directory ディレクトリ情報を保持する。 PredBuilder 検索コマンドの検索条件をコンパイルし、Pythonの関数オブジェクトを生成する。 File ファイル情報を保持する。 LL Weekend 君ならどうする ls-lRシェル Python編 2004/8/7 Atsuo Ishimoto /2

2 PythonのIteratorオブジェクト Generator関数
次の値を返すnext()メソッドを持つ next()で返すオブジェクトがなければ、StopIteration例外を送出する __iter__()メソッドを持ち、自分自身を返す class AlterIter: '''seq1, seq2内の要素を交互に返すイテレータ''' def __init__(self, seq1, seq2): self._seqs = (seq1, seq2) self._cur = 0 self._max = min(len(seq1), len(seq2)) def __iter__(self): return self def next(self): n, idx = self._cur % 2, self._cur//2 if idx >= self._max: raise StopIteration ret = self._seqs[n][idx] self._cur += 1 return ret for v in AlterIter([1,2],['a','b']): print v, 出力 => 1 a 2 b Generator関数 定義内にyield文を含む関数 呼び出されると Iteratorの一種であるgeneratorオブジェクトを返す generatorのnext()メソッドを呼び出すと、関数のyield文までを実行してその値を返す yield文に遭遇せずに関数が終了すると、StopIteration例外を送出する def fibonacci(): i = j = 1 yield i yield j while True: i, j = j, i+j for n in fibonacci(): print n, 出力 => def AlterIter(seq1, seq2): _max = min(len(seq1), len(seq2)) for idx in range(_max): yield seq1[idx] yield seq2[idx] LL Weekend 君ならどうする ls-lRシェル Python編 2004/8/7 Atsuo Ishimoto /2


Download ppt "君ならどうする – ls-lRシェル Python編"

Similar presentations


Ads by Google