Your SlideShare is downloading. ×
0
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

エキ Py 読書会02 2010/9/7

1,489

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,489
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
4
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 2010/9/7(Tue.) t2y
  • 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]  Python の内包表記はなぜ速い?  append 属性の取り出し バイトコード  関数の呼び出し 命令数の削減 使えるなら使った方が良い
  • 5. P.63 コード  enumerate() 関数に感激!  ループ処理でインデックスやカウンタを使用した いときに便利 01  Pythonic な構文とは何か?  小さなコードパターンに対して、もっとも効率的な イディオムを使用した構文
  • 6. P.64 -65  イテレータ(iterator)  繰り返し要素を返すオブジェクトのこと  2つのメソッドを実装したオブジェクト  next() メソッド(Python3 では __next__)  __iter__ メソッド - 英単語のおさらい iterate: 繰り返す、反復する iterable: 繰り返し可能な(モノ) iteration: イテレーション iterative: 反復の iterant: 反復する
  • 7.  wikipedia:ジェネレータ(generator)  特殊なサブルーチン  関数に似ているが、イテレータのように振る舞う  エキPy: ジェネレータ P.65 下段  ジェネレータは yield 文を使用して、 関数を一時停止させ、途中経過の結果を返す 02 -英単語のおさらい generate: 生む、発生させる yield: 産出する、生み出す
  • 8.  ジェネレータの用途  イテレータを作成する  巨大なデータを扱い易い(省メモリ) 03  途中経過を利用できる  無限に続く特性を持つアルゴリズムを扱う  フィボナッチ数列のような数値計算  ファイル/テキスト/バイナリストリームの扱い “ループ処理やシーケンスを返す関数を 実装するときには、まずジェネレータの 利用を検討すべきです”
  • 9.  Python Enhancement Proposal P.66 Note (Python 拡張提案)  Python に変更を加えるための提案書  PEP1: PEP の目的とガイドライン  PEP3138: Python3000 の文字列表現  石本さんの発表資料
  • 10. P.68-69  ジェネレータの新メソッド  send: ジェネレータへ値を渡す 04  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 を使用したシンプルなルー プや、イテレータのように動作するリ スト内包表記は、積極的にジェネ レータ式に置き換えるべきです”
  • 12.  イテレータを返す関数を提供するモジュール  islice: ウィンドウイテレータ  入力イテレータをスライシングしてイテレータを返す  tee: 前後方イテレータ  オリジナルの入力イテレータから複数の独立したイテレータ を返す(tee コマンド)  groupby: ユニークイテレータ  グループ化した値セットのイテレータを返す(uniq コマンド)  その他の関数 05  ピュア Python で動作の説明がある
  • 13. P.75 他の関数  イテレータを組み合わせる  itertools の関数を入力イテレータに使用するこ とで様々な応用例が考えられる 06  imap/izip や starmap で連携  パフォーマンス
  • 14. P.76 - 79  デコレータ(decorator)  関数やメソッドのラッピング処理の見た目を分かり 易くする  デコレータ構文を使用しなくても同処理が書ける  デコレータの良いプラクティス P.79 Note  汎用的なラッパーとなる処理  ラップした関数の引数、返り値を見るようにして、できるだけそ の関数の内部を解析しないようにすべき 関数の pre/post 処理を実装する 07   1つのモジュール内にまとめる
  • 15.  XML-RPC プロトコル P.80 - 81  引数を取るデコレータ  デコレータ内の処理結果を使いたいときはグロー バル変数を使うしかない?  関数内部を解析しないようにすべき? def xmlrpc(in_=(), out(type(None),)): def _xmlrpm(function): def __xmlrpc(*args): return function(*args) retrun __xmlrpc return _xmlrpc
  • 16. P.82 - 84  キャッシュデコレータ  関数型プログラミングの特徴  出力が内部状態の影響を受けない  引数から必ず一意な結果が算出される  関数を呼び出さず、キャッシュの値を返す  やっぱりキャッシュはグローバル変数  メモ化(memoizing) 08  たらいを回すならHaskell
  • 17. P.85  プロキシデコレータ  Web フレームワークのセキュリティを確保する仕 組みに利用される?  Django での使用例  login_required デコレータ  permission_required デコレータ
  • 18. P.86  コンテキストデコレータ  正しい実行コンテキストでの実行を保証  例) スレッドのロック  デコレータでなくても with 文でできるよ  Python 2.6 以降
  • 19.  Python デコレータライブラリ P.87  インスタンスへメソッドを追加する  こんな状況あるかな?  引数の情報収集  Oreilly2sphinx  ハンドラ登録  プログラム終了時に実行する  引数のカッコが省略可能なデコレータの実装方法
  • 20. P.88-90  with 文  try...finally の置き換え  ファイルを閉じる  ロックを解除する  一時的にコードにパッチをあてる  特定環境で保護されたコードを実行する  2つのメソッドを実装したプロトコル  __enter__: with ブロックに入るときに何かする、大抵は self を返す  __exit__: with ブロックを出るときに何かする、クリーンナップ デコレータのコンテキストプロバイダと 09 同様に pre/post 処理を行う
  • 21.  with 文のヘルパー関数を提供 P.91-92  contextmanager が役に立つ  yield 文で分割  yield より前: __enter__ の処理  yiled が生成した値は as で指定した変数へセット  yield より後: __exit__ の処理  closing: close メソッドの呼び出しを保証する 10  ストリームを扱うクラスに役立つ、例) urllib.urlopen  nested: コンテキストを結合してネストされた with を扱う
  • 22. P.93  リスト内包表記は便利だよ!  イテレータとジェネレータで効率的に!  デコレータで新たなコードパターンが!  try...finally に代わり with 文を!

×