2010/9/29(Wed.) t2y
2.1 リスト内包表記
2.2 イテレータとジェネレータ ジェネレータ、コルーチン、ジェネレータ式
itertools モジュール
2.3 デコレータ 引数チェック、キャッシュ、プロキシ、その他
2.4 with と contextlib contextlib モジュール
2.5 まとめ
P. 62 ~
P. 64 ~
P. 76 ~
P. 88 ~
P. 93 ~
使ってみたくなるツール類が
たくさんあります
第2章には
P.61
リスト内包表記
>>> [i for i in range(0,3)]
[0, 1, 2]
Python の内包表記はなぜ速い?
append 属性の取り出し
関数の呼び出し
バイトコード命令数の削減
使えるなら使った方が良い
P.62 訳注
01
enumerate() 関数に感激!
ループ処理でインデックスやカウンタを使用したいときに便利
Pythonic な構文とは何か?
小さなコードパターンに対して、もっとも効率的なイディオムを使用した構文 The Zen of Python 解題 – 前編
The Zen of Python 解題 – 後編
02
P.63 コード
イテレータ(iterator)
繰り返し要素を返すオブジェクトのこと
2つのメソッドを実装したオブジェクト
next() メソッド(Python3 では __next__)
__iter__ メソッド
itertool 関数(ライブラリリファレンス)
- 英単語のおさらいiterate: 繰り返す、反復するiterable: 繰り返し可能な(モノ)iteration: イテレーションiterative: 反復のiterant: 反復する
P.64 -65
wikipedia:ジェネレータ(generator)
特殊なサブルーチン
関数に似ているが、イテレータのように振る舞う
エキPy: ジェネレータ
ジェネレータは yield 文を使用して、
関数を一時停止させ、途中の結果を生成する
-英単語のおさらいgenerate: 生む、発生させるyield: 産出する、生み出す
03
P.65 下段
ジェネレータの用途
イテレータを作成する
巨大なデータ(ファイルやテキスト)を扱い易い
プログレスバー等で途中経過を利用できる
無限に続く特性を持つアルゴリズムを扱う
ソケットやストリームを扱うネットワークを介した処理
フィボナッチ数列のような数値計算
“ループ処理やシーケンスを返す関数を
実装するときには、まずジェネレータの利用を検討すべきです”
04/05
Python Enhancement Proposal
(Python 拡張提案)
Python に変更を加えるための提案書
PEP1: PEP の目的とガイドライン
PEP3138: Python3000 の文字列表現
石本さんの発表資料
P.66 Note
ジェネレータの新メソッド
send: ジェネレータへ値を渡す
throw: ジェネレータへ例外を送る
close: ジェネレータに GeneratorExit を発生させる
Online Python Tutor
3つのメソッドを使用して
コルーチンを実装する PEP342: 拡張ジェネレータによるコルーチン
P.68-69
P.69-71
06
ジェネレータ式(genexp)
>>> (i for i in range(0,3))
<generator object <genexpr> at 0x94b907c>
“yield を使用したシンプルなルー
プや、イテレータのように動作するリスト内包表記は、積極的にジェネレータ式に置き換えるべきです”
P.72 真ん中
Top Related