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

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (11)

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

エキ 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 文を!