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