Python.use(better) 《余録》デコレーター #1:関数の装飾
‖記事一覧‖ Python.use(better)《Python3.1》
デコレーター #1:関数の装飾
《著》森こねこ、小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/25 ● 第2版♪2004/06/01 ● 第3版♪2009/02/28
例題によって「基本構文」の理解を深めます。
※ Python2.4 で作成した例題を、Python3.1 で再構成しました。
■ 事例1:
次に示すコードの断片
def happy(arg): #1a: print("Are you happy():", arg) happy("?") print("-"*40) print(happy) #1b: print("="*40) def piyo(arg): #2a: print("I am piyo():", arg) return "Yes, as happy as happy can be." @piyo def happy(arg): print("I am happy():", arg) print("-"*40) print(happy) #2b:
を実行すると、次のような出力結果
Are you happy(): ? ========================================I am piyo():
- -
======================================== Yes, as happy as happy can be.
が得られます。
■ 解説
デコレーター構文
@piyo
を評価すると、関数 piyo を呼び出します。すると、次のような出力結果
I am piyo():
が得られます。デコレーター @piyo で関数 happy を修飾すると、次に示す
happy = piyo(happy) #5:
と、同じ効果が得られます。つまり、関数 piyo の実引数に、関数オブジェクト happy を指定したのと同じです。そのため、
- (#2a)引数 arg を介して、関数オブジェクト happy を参照するので、
I am piyo():
という出力結果が得られます。しかも、文字列オブジェクトをリターン値に指定したので、
- (#2b)組み込み関数 print の引数に happy を指定すると、
Yes, as happy as happy can be.
このように、文字列が出力されるだけです。なぜなら、関数を定義したときの名前と同じ
- (#5)変数 happy は、リターン値である、文字列オブジェクトを参照する
からです。もはや、変数 happy は、関数オブジェクトを参照しません。
》こちらに移動中です《
↑TOP
関連記事
- Python への扉
- INDEX: @《Python》@
- 2010-01-25《余録》テストケースの行間を読む #2
セミナー課題の中から、他の書籍でも紹介されている内容は、
受講者ではなくても閲覧できるように、ここに公開します。
|
8.1.5 でも「デコレーター」を話題にしているので、比較するのも一興です。 |
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ | □ |
Last updated♪2010/01/27