SlideShare a Scribd company logo
1 of 22
Download to read offline
2010/9/7(Tue.) t2y
   2.1 リスト内包表記 P. 62 ~
   2.2 イテレータとジェネレータ                 P. 64 ~

       ジェネレータ、コルーチン、ジェネレータ式
       itertools モジュール
   2.3 デコレータ         P. 76 ~

       引数チェック、キャッシュ、プロキシ、その他
   2.4 with と contextlib       P. 88 ~

       contextlib モジュール
   2.5 まとめ     P. 93 ~
   第2章には
              P.61



       使ってみたくなる
        ツール類が
       たくさんあります
   リスト内包表記
    >>> [i for i in range(0,3)]
                                  P.62 訳注
    [0, 1, 2]
   Python の内包表記はなぜ速い?
     append 属性の取り出し           バイトコード
     関数の呼び出し                 命令数の削減


        使えるなら使った方が良い
P.63 コード
   enumerate() 関数に感激!
       ループ処理でインデックスやカウンタを使用した
        いときに便利
                01


   Pythonic な構文とは何か?
       小さなコードパターンに対して、もっとも効率的な
        イディオムを使用した構文
P.64 -65
   イテレータ(iterator)
     繰り返し要素を返すオブジェクトのこと
     2つのメソッドを実装したオブジェクト

         next() メソッド(Python3 では __next__)
         __iter__ メソッド


     - 英単語のおさらい
     iterate: 繰り返す、反復する
     iterable: 繰り返し可能な(モノ)
     iteration: イテレーション
     iterative: 反復の
     iterant: 反復する
   wikipedia:ジェネレータ(generator)
     特殊なサブルーチン
     関数に似ているが、イテレータのように振る舞う

   エキPy: ジェネレータ               P.65 下段

       ジェネレータは yield 文を使用して、
        関数を一時停止させ、途中経過の結果を返す
                          02
     -英単語のおさらい
     generate: 生む、発生させる
     yield: 産出する、生み出す
   ジェネレータの用途
       イテレータを作成する
         巨大なデータを扱い易い(省メモリ)
                              03
         途中経過を利用できる

       無限に続く特性を持つアルゴリズムを扱う
         フィボナッチ数列のような数値計算
         ファイル/テキスト/バイナリストリームの扱い



    “ループ処理やシーケンスを返す関数を
     実装するときには、まずジェネレータの
        利用を検討すべきです”
   Python Enhancement Proposal
                      P.66 Note
     (Python 拡張提案)
     Python に変更を加えるための提案書
     PEP1: PEP の目的とガイドライン

     PEP3138: Python3000 の文字列表現

           石本さんの発表資料
P.68-69
   ジェネレータの新メソッド
     send: ジェネレータへ値を渡す
                                     04
     throw: ジェネレータへ例外を送る

     close: ジェネレータに GeneratorExit を発生させる

     Online Python Tutor


   3つのメソッドを使用して           P.69-71

    コルーチンを実装する
       PEP342: 拡張ジェネレータによるコルーチン
   ジェネレータ式(genexp)                   P.72 真ん中
       >>> (i for i in range(0,3))
       <generator object <genexpr> at 0x94b907c>


        “yield を使用したシンプルなルー
        プや、イテレータのように動作するリ
         スト内包表記は、積極的にジェネ
         レータ式に置き換えるべきです”
   イテレータを返す関数を提供するモジュール
       islice: ウィンドウイテレータ
           入力イテレータをスライシングしてイテレータを返す
       tee: 前後方イテレータ
           オリジナルの入力イテレータから複数の独立したイテレータ
            を返す(tee コマンド)
       groupby: ユニークイテレータ
           グループ化した値セットのイテレータを返す(uniq コマンド)
       その他の関数
                                    05
           ピュア Python で動作の説明がある
P.75 他の関数
   イテレータを組み合わせる
     itertools の関数を入力イテレータに使用するこ
      とで様々な応用例が考えられる
                              06
     imap/izip や starmap で連携

     パフォーマンス
P.76 - 79
   デコレータ(decorator)
     関数やメソッドのラッピング処理の見た目を分かり
      易くする
     デコレータ構文を使用しなくても同処理が書ける

     デコレータの良いプラクティス
                      P.79 Note
           汎用的なラッパーとなる処理
               ラップした関数の引数、返り値を見るようにして、できるだけそ
                の関数の内部を解析しないようにすべき
                関数の pre/post 処理を実装する
                                       07
            


           1つのモジュール内にまとめる
   XML-RPC プロトコル                    P.80 - 81

       引数を取るデコレータ
       デコレータ内の処理結果を使いたいときはグロー
        バル変数を使うしかない?
           関数内部を解析しないようにすべき?

        def xmlrpc(in_=(), out(type(None),)):
          def _xmlrpm(function):
             def __xmlrpc(*args):
                return function(*args)
             retrun __xmlrpc
          return _xmlrpc
P.82 - 84
   キャッシュデコレータ
     関数型プログラミングの特徴
     出力が内部状態の影響を受けない

         引数から必ず一意な結果が算出される
         関数を呼び出さず、キャッシュの値を返す

         やっぱりキャッシュはグローバル変数

       メモ化(memoizing)
                               08
           たらいを回すならHaskell
P.85
   プロキシデコレータ
     Web フレームワークのセキュリティを確保する仕
      組みに利用される?
     Django での使用例

         login_required デコレータ
         permission_required デコレータ
P.86
   コンテキストデコレータ
       正しい実行コンテキストでの実行を保証
           例) スレッドのロック
   デコレータでなくても with 文でできるよ
       Python 2.6 以降
   Python デコレータライブラリ        P.87
       インスタンスへメソッドを追加する
           こんな状況あるかな?
       引数の情報収集
           Oreilly2sphinx
       ハンドラ登録
           プログラム終了時に実行する
   引数のカッコが省略可能なデコレータの実装方法
P.88-90
   with 文
       try...finally の置き換え
         ファイルを閉じる
         ロックを解除する

         一時的にコードにパッチをあてる

         特定環境で保護されたコードを実行する

   2つのメソッドを実装したプロトコル
       __enter__: with ブロックに入るときに何かする、大抵は self を返す
       __exit__: with ブロックを出るときに何かする、クリーンナップ

            デコレータのコンテキストプロバイダと           09
              同様に pre/post 処理を行う
 with 文のヘルパー関数を提供                        P.91-92
 contextmanager が役に立つ

       yield 文で分割
           yield より前: __enter__ の処理
                yiled が生成した値は as で指定した変数へセット
           yield より後: __exit__ の処理
   closing: close メソッドの呼び出しを保証する
                                                    10
       ストリームを扱うクラスに役立つ、例) urllib.urlopen
   nested: コンテキストを結合してネストされた with を扱う
P.93
 リスト内包表記は便利だよ!
 イテレータとジェネレータで効率的に!

 デコレータで新たなコードパターンが!

 try...finally に代わり with 文を!

More Related Content

What's hot

Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Ransui Iso
 
boost::shared_ptr tutorial
boost::shared_ptr tutorialboost::shared_ptr tutorial
boost::shared_ptr tutorialNU_Pan
 
デバドラを書いてみよう!
デバドラを書いてみよう!デバドラを書いてみよう!
デバドラを書いてみよう!Masami Ichikawa
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるKoichi Sakata
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターンMoriharu Ohzu
 
メタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しいメタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しいShigeru UCHIYAMA
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由kikairoya
 
Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。Yuichi Sakuraba
 
Python で munin plugin を書いてみる
Python で munin plugin を書いてみるPython で munin plugin を書いてみる
Python で munin plugin を書いてみるftnk
 
研究生のためのC++ no.7
研究生のためのC++ no.7研究生のためのC++ no.7
研究生のためのC++ no.7Tomohiro Namba
 
NetBSD/i386 割り込みベクタテーブル
NetBSD/i386 割り込みベクタテーブルNetBSD/i386 割り込みベクタテーブル
NetBSD/i386 割り込みベクタテーブルkusabanachi
 
TensorFlow計算グラフ最適化処理
TensorFlow計算グラフ最適化処理TensorFlow計算グラフ最適化処理
TensorFlow計算グラフ最適化処理Atsushi Nukariya
 
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーNode.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーmganeko
 
Swift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsap
Swift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsapSwift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsap
Swift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsapTomohiro Kumagai
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかYuki Miyatake
 

What's hot (20)

Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
boost::shared_ptr tutorial
boost::shared_ptr tutorialboost::shared_ptr tutorial
boost::shared_ptr tutorial
 
デバドラを書いてみよう!
デバドラを書いてみよう!デバドラを書いてみよう!
デバドラを書いてみよう!
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
 
emc++ chapter32
emc++ chapter32emc++ chapter32
emc++ chapter32
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターン
 
メタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しいメタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しい
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
Unityで覚えるC#
Unityで覚えるC#Unityで覚えるC#
Unityで覚えるC#
 
Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。
 
Python で munin plugin を書いてみる
Python で munin plugin を書いてみるPython で munin plugin を書いてみる
Python で munin plugin を書いてみる
 
研究生のためのC++ no.7
研究生のためのC++ no.7研究生のためのC++ no.7
研究生のためのC++ no.7
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
R spec勉強会
R spec勉強会R spec勉強会
R spec勉強会
 
NetBSD/i386 割り込みベクタテーブル
NetBSD/i386 割り込みベクタテーブルNetBSD/i386 割り込みベクタテーブル
NetBSD/i386 割り込みベクタテーブル
 
TensorFlow計算グラフ最適化処理
TensorFlow計算グラフ最適化処理TensorFlow計算グラフ最適化処理
TensorFlow計算グラフ最適化処理
 
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーNode.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
 
Swift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsap
Swift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsapSwift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsap
Swift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsap
 
C++14 Overview
C++14 OverviewC++14 Overview
C++14 Overview
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
 

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

Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPAkira Takahashi
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputingNoboru Irieda
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1信之 岩永
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniterYuya Matsushima
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2Tomohiro Namba
 
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)YoheiOkuyama
 
Handlersocket etc. 20110906
Handlersocket etc. 20110906Handlersocket etc. 20110906
Handlersocket etc. 20110906akirahiguchi
 
20170131 python3 6 PEP526
20170131 python3 6 PEP526 20170131 python3 6 PEP526
20170131 python3 6 PEP526 masahitojp
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努Insight Technology, Inc.
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識shigeya
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッドKohsuke Yuasa
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Seiya Tokui
 
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Ryosuke Okuta
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, CodereadingHiro Yoshioka
 

Similar to エキ Py 読書会02 2010/9/7 (20)

Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniter
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2
 
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
 
最速C# 7.x
最速C# 7.x最速C# 7.x
最速C# 7.x
 
実践 NestJS
実践 NestJS実践 NestJS
実践 NestJS
 
Handlersocket etc. 20110906
Handlersocket etc. 20110906Handlersocket etc. 20110906
Handlersocket etc. 20110906
 
20170131 python3 6 PEP526
20170131 python3 6 PEP526 20170131 python3 6 PEP526
20170131 python3 6 PEP526
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
Boost Tour 1.50.0 All
Boost Tour 1.50.0 AllBoost Tour 1.50.0 All
Boost Tour 1.50.0 All
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
 
Php5.4
Php5.4Php5.4
Php5.4
 
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 

More from Tetsuya Morimoto

ビジネスパーソン x プログラミング
ビジネスパーソン x プログラミングビジネスパーソン x プログラミング
ビジネスパーソン x プログラミングTetsuya Morimoto
 
チケット駆動開発のススメ
チケット駆動開発のススメチケット駆動開発のススメ
チケット駆動開発のススメTetsuya Morimoto
 
Pythonと型チェッカー
Pythonと型チェッカーPythonと型チェッカー
Pythonと型チェッカーTetsuya Morimoto
 
PyLadies Tokyo 二周年記念パーティ LT
PyLadies Tokyo 二周年記念パーティ LTPyLadies Tokyo 二周年記念パーティ LT
PyLadies Tokyo 二周年記念パーティ LTTetsuya Morimoto
 
PyCon JP 2016 ビギナーセッション
PyCon JP 2016 ビギナーセッションPyCon JP 2016 ビギナーセッション
PyCon JP 2016 ビギナーセッションTetsuya Morimoto
 
Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Tetsuya Morimoto
 
ストリーミングのげんざい
ストリーミングのげんざいストリーミングのげんざい
ストリーミングのげんざいTetsuya Morimoto
 
Python3 プログラミング勉強会
Python3 プログラミング勉強会Python3 プログラミング勉強会
Python3 プログラミング勉強会Tetsuya Morimoto
 
Ikazuchi introduction for Europython 2011 LT
Ikazuchi introduction for Europython 2011 LTIkazuchi introduction for Europython 2011 LT
Ikazuchi introduction for Europython 2011 LTTetsuya Morimoto
 
Python界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクトPython界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクトTetsuya Morimoto
 

More from Tetsuya Morimoto (15)

ビジネスパーソン x プログラミング
ビジネスパーソン x プログラミングビジネスパーソン x プログラミング
ビジネスパーソン x プログラミング
 
チケット駆動開発のススメ
チケット駆動開発のススメチケット駆動開発のススメ
チケット駆動開発のススメ
 
Pythonと型チェッカー
Pythonと型チェッカーPythonと型チェッカー
Pythonと型チェッカー
 
PyLadies Tokyo 二周年記念パーティ LT
PyLadies Tokyo 二周年記念パーティ LTPyLadies Tokyo 二周年記念パーティ LT
PyLadies Tokyo 二周年記念パーティ LT
 
PyCon JP 2016 ビギナーセッション
PyCon JP 2016 ビギナーセッションPyCon JP 2016 ビギナーセッション
PyCon JP 2016 ビギナーセッション
 
Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)
 
Hyper Introduction
Hyper IntroductionHyper Introduction
Hyper Introduction
 
ストリーミングのげんざい
ストリーミングのげんざいストリーミングのげんざい
ストリーミングのげんざい
 
Python3 プログラミング勉強会
Python3 プログラミング勉強会Python3 プログラミング勉強会
Python3 プログラミング勉強会
 
PyCon 2012 紀行
PyCon 2012 紀行PyCon 2012 紀行
PyCon 2012 紀行
 
Sphinx 社内勉強会
Sphinx 社内勉強会Sphinx 社内勉強会
Sphinx 社内勉強会
 
Ikazuchi introduction for Europython 2011 LT
Ikazuchi introduction for Europython 2011 LTIkazuchi introduction for Europython 2011 LT
Ikazuchi introduction for Europython 2011 LT
 
Python界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクトPython界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクト
 
Ex py intro-20100630
Ex py intro-20100630Ex py intro-20100630
Ex py intro-20100630
 
曖昧 RPM 講座
曖昧 RPM 講座曖昧 RPM 講座
曖昧 RPM 講座
 

Recently uploaded

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成Hiroshi Tomioka
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Recently uploaded (9)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

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

  • 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 文を!