SlideShare ist ein Scribd-Unternehmen logo
1 von 14
Downloaden Sie, um offline zu lesen
2010/10/5(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 ~
   イテレータ
       繰り返し要素を返すオブジェクトのこと
        for j in [i for i in range(3)]:
           print j                            イテレータ
                                                    ジェネレータ
   ジェネレータ
       yield 文を使用して関数を一時停止させ、途中の
        結果を生成する
         def generator():                 for i in generator():
           for i in [0, 1, 2]:               print i
              yield i
   イテレータを返す関数を提供するモジュール
       islice: ウィンドウイテレータ
           入力イテレータをスライシングしてイテレータを返す
       tee: 前後方イテレータ
           オリジナルの入力イテレータから複数の独立したイテレータ
            を返す(tee コマンド)
       groupby: ユニークイテレータ
           グループ化した値セットのイテレータを返す(uniq コマンド)
       その他の関数
                                    07
           ピュア Python で動作の説明がある
P.75 他の関数
   イテレータを組み合わせる
     itertools の関数を入力イテレータに使用するこ
      とで様々な用途に応用ができそう
                              08
     imap/izip や starmap で連携

     パフォーマンス

           メモリ効率が良いので速くなる
P.76 - 79
   デコレータ(decorator)
     関数やメソッドのラッピング処理の見た目を分かり
      易くする
     デコレータ構文を使用しなくても同処理が書ける

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


           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)
         たらいを回すならHaskell
         Python でもチャンレンジしてみよう
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 ブロックを出るときに何かする、クリーンナップ

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

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

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

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

Weitere ähnliche Inhalte

Was ist angesagt?

Xtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使うXtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使うTatsumi Naganuma
 
effective modern c++ chapeter36
effective modern c++ chapeter36effective modern c++ chapeter36
effective modern c++ chapeter36Tatsuki SHIMIZU
 
ジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansaiジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansaiTomohiro Kumagai
 
Xtend30分クッキング やきに駆動
Xtend30分クッキング   やきに駆動Xtend30分クッキング   やきに駆動
Xtend30分クッキング やきに駆動Shinichi Kozake
 
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Yoshifumi Kawai
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ信之 岩永
 
Async design with Unity3D
Async design with Unity3DAsync design with Unity3D
Async design with Unity3DKouji Hosoda
 
constexpr idioms
constexpr idiomsconstexpr idioms
constexpr idiomsfimbul
 
TensorFlow XLA 「XLAとは、から、最近の利用事例について」
TensorFlow XLA 「XLAとは、から、最近の利用事例について」TensorFlow XLA 「XLAとは、から、最近の利用事例について」
TensorFlow XLA 「XLAとは、から、最近の利用事例について」Mr. Vengineer
 
Swift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhiosSwift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhiosTomohiro Kumagai
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Ransui Iso
 
メタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しいメタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しいShigeru UCHIYAMA
 
RuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for UnityRuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for UnityYoshifumi Kawai
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由kikairoya
 
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Keisuke Fukuda
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説do_aki
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話Hisateru Tanaka
 

Was ist angesagt? (20)

Effective modern-c++#9
Effective modern-c++#9Effective modern-c++#9
Effective modern-c++#9
 
Xtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使うXtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使う
 
effective modern c++ chapeter36
effective modern c++ chapeter36effective modern c++ chapeter36
effective modern c++ chapeter36
 
ジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansaiジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansai
 
Xtend30分クッキング やきに駆動
Xtend30分クッキング   やきに駆動Xtend30分クッキング   やきに駆動
Xtend30分クッキング やきに駆動
 
Unityで覚えるC#
Unityで覚えるC#Unityで覚えるC#
Unityで覚えるC#
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
Async design with Unity3D
Async design with Unity3DAsync design with Unity3D
Async design with Unity3D
 
constexpr idioms
constexpr idiomsconstexpr idioms
constexpr idioms
 
TensorFlow XLA 「XLAとは、から、最近の利用事例について」
TensorFlow XLA 「XLAとは、から、最近の利用事例について」TensorFlow XLA 「XLAとは、から、最近の利用事例について」
TensorFlow XLA 「XLAとは、から、最近の利用事例について」
 
Swift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhiosSwift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhios
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
メタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しいメタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しい
 
RuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for UnityRuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for Unity
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
 

Andere mochten auch

エキ Py 読書会02 2章前半
エキ Py 読書会02 2章前半エキ Py 読書会02 2章前半
エキ Py 読書会02 2章前半Tetsuya Morimoto
 
Python界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクトPython界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクト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
 

Andere mochten auch (7)

PyCon 2012 紀行
PyCon 2012 紀行PyCon 2012 紀行
PyCon 2012 紀行
 
エキ Py 読書会02 2章前半
エキ Py 読書会02 2章前半エキ Py 読書会02 2章前半
エキ Py 読書会02 2章前半
 
Ex py intro-20100630
Ex py intro-20100630Ex py intro-20100630
Ex py intro-20100630
 
Python界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクトPython界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクト
 
Ikazuchi introduction for Europython 2011 LT
Ikazuchi introduction for Europython 2011 LTIkazuchi introduction for Europython 2011 LT
Ikazuchi introduction for Europython 2011 LT
 
Tweaking Google TV emulator
Tweaking Google TV emulatorTweaking Google TV emulator
Tweaking Google TV emulator
 
曖昧 RPM 講座
曖昧 RPM 講座曖昧 RPM 講座
曖昧 RPM 講座
 

Ähnlich wie エキ Py 読書会02 2章後半

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
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッドKohsuke Yuasa
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniterYuya Matsushima
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識shigeya
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputingNoboru Irieda
 
DTrace for biginners part(2)
DTrace for biginners part(2)DTrace for biginners part(2)
DTrace for biginners part(2)Shoji Haraguchi
 
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)YoheiOkuyama
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努Insight Technology, Inc.
 
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーNode.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーmganeko
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードKazuhiro Hara
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, CodereadingHiro Yoshioka
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめMakiko Konoshima
 
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信之 岩永
 
Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御Norito Agetsuma
 

Ähnlich wie エキ Py 読書会02 2章後半 (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
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
 
MoteMote Compiler Plugin
MoteMote Compiler PluginMoteMote Compiler Plugin
MoteMote Compiler Plugin
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniter
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
 
DTrace for biginners part(2)
DTrace for biginners part(2)DTrace for biginners part(2)
DTrace for biginners part(2)
 
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
 
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーNode.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
実践 NestJS
実践 NestJS実践 NestJS
実践 NestJS
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
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
 
最速C# 7.x
最速C# 7.x最速C# 7.x
最速C# 7.x
 
Boost Fusion Library
Boost Fusion LibraryBoost Fusion Library
Boost Fusion Library
 
Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御
 

Mehr von 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
 

Mehr von Tetsuya Morimoto (10)

ビジネスパーソン 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 プログラミング勉強会
 
Sphinx 社内勉強会
Sphinx 社内勉強会Sphinx 社内勉強会
Sphinx 社内勉強会
 

エキ 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. イテレータ  繰り返し要素を返すオブジェクトのこと for j in [i for i in range(3)]: print j イテレータ ジェネレータ  ジェネレータ  yield 文を使用して関数を一時停止させ、途中の 結果を生成する def generator(): for i in generator(): for i in [0, 1, 2]: print i yield i
  • 4. イテレータを返す関数を提供するモジュール  islice: ウィンドウイテレータ  入力イテレータをスライシングしてイテレータを返す  tee: 前後方イテレータ  オリジナルの入力イテレータから複数の独立したイテレータ を返す(tee コマンド)  groupby: ユニークイテレータ  グループ化した値セットのイテレータを返す(uniq コマンド)  その他の関数 07  ピュア Python で動作の説明がある
  • 5. P.75 他の関数  イテレータを組み合わせる  itertools の関数を入力イテレータに使用するこ とで様々な用途に応用ができそう 08  imap/izip や starmap で連携  パフォーマンス  メモリ効率が良いので速くなる
  • 6. P.76 - 79  デコレータ(decorator)  関数やメソッドのラッピング処理の見た目を分かり 易くする  デコレータ構文を使用しなくても同処理が書ける  デコレータの良いプラクティス P.79 Note  汎用的なラッパーとなる処理  ラップした関数の引数、返り値を見るようにして、できるだけそ の関数の内部を解析しないようにすべき 関数の pre/post 処理を実装する 09   1つのモジュール内にまとめる
  • 7. XML-RPC プロトコル P.80 - 81  引数を取るデコレータ  デコレータ内の処理結果を使いたいときはグロー バル変数を使うしかない?  関数内部を解析しないようにすべき? def xmlrpc(in_=(), out(type(None),)): def _xmlrpm(function): def __xmlrpc(*args): return function(*args) retrun __xmlrpc return _xmlrpc
  • 8. P.82 - 84  キャッシュデコレータ  関数型プログラミングの特徴  出力が内部状態の影響を受けない  引数から必ず一意な結果が算出される  関数を呼び出さず、キャッシュの値を返す  やっぱりキャッシュはグローバル変数  メモ化(memoizing)  たらいを回すならHaskell  Python でもチャンレンジしてみよう
  • 9. P.85  プロキシデコレータ  Web フレームワークのセキュリティを確保する仕 組みに利用される?  Django での使用例  login_required デコレータ  permission_required デコレータ
  • 10. P.86  コンテキストデコレータ  正しい実行コンテキストでの実行を保証  例) スレッドのロック  デコレータでなくても with 文でできるよ  Python 2.6 以降
  • 11. Python デコレータライブラリ P.87  インスタンスへメソッドを追加する  こんな状況あるかな?  引数の情報収集  Oreilly2sphinx  ハンドラ登録  プログラム終了時に実行する  引数のカッコが省略可能なデコレータの実装方法
  • 12. P.88-90  with 文  try...finally の置き換え  ファイルを閉じる  ロックを解除する  一時的にコードにパッチをあてる  特定環境で保護されたコードを実行する  2つのメソッドを実装したプロトコル  __enter__: with ブロックに入るときに何かする、大抵は self を返す  __exit__: with ブロックを出るときに何かする、クリーンナップ デコレータのコンテキストプロバイダと 10 同様に pre/post 処理を行う
  • 13.  with 文のヘルパー関数を提供 P.91-92  contextmanager が役に立つ  yield 文で分割  yield より前: __enter__ の処理  yiled が生成した値は as で指定した変数へセット  yield より後: __exit__ の処理  closing: close メソッドの呼び出しを保証する 11  ストリームを扱うクラスに役立つ、例) urllib.urlopen  nested: コンテキストを結合してネストされた with を扱う
  • 14. P.93  リスト内包表記は便利だよ!  イテレータとジェネレータで効率的に!  デコレータで新たなコードパターンが!  try...finally に代わり with 文を!