- トップページ
- 特集PC技術
- Pythonを学ぼう
- 第26回 デコレーター
Pythonを学ぼう
第26回 デコレーター
1.デコレーターとは
デコレーターとは、関数を修飾して、新しい関数を作成します。
つまり、関数に付加機能をつけることができます。
複数の関数に対して、同等の付加機能をつけたい場合に有効となります。
2.デコレーターの基本
デコレーターの基本文法は次のように書きます。
@デコレーター名(引数)
修飾したい関数の前に上記の文法を記述すると、その関数を修飾できます。
基本的に、デコレーターを使用する場合は、デコレーター関数内で、関数を定義して使用します。
次のプログラムを見てください。
# coding: utf-8 # デコレーター関数定義 def deco(f): def in_deco(): print('before') f() return in_deco # デコレーターを指定 @deco def func(): print('decorate') # 関数funcを実行 func() |
実行結果
before
decorate
デコレーターにより、deco関数の処理前に、'before'を出力しています。
このように、func関数そのものには、修正を加えずに、機能を追加できるところが、デコレーターの利点です。
3.デコレーターの引数
デコレーターに引数を使用することができます。
次のプログラムを見てください。
# coding: utf-8 # デコレーター関数定義 def deco(value): def deco1(f1): def deco2(*args, **kwds): return value return deco2 return deco1 # 引数付きでデコレーターを指定 @deco(False) def func(): return True # 関数funcを実行 print(func()) |
実行結果
False
deco関数は引数で与えたものを返す機能となっています。
そのため、func関数を実行すると、引数Falseが戻り値になります。
4.デコレーターのネスト
デコレーターはネストすることができます。
ネストする場合、デコレーターを複数指定します。
次のプログラムを見てください。
# coding: utf-8 # デコレーター関数定義 def deco(f): def deco1(*args, **kwds): result = f(*args, **kwds) return result * 2 return deco1 # ネストしてデコレーターを指定 @deco @deco def func(): return 3 # 関数funcを実行→(3 * 2) * 2 = 12 print(func()) |
実行結果
12
@decoを2回指定してネストしています。
deco関数は、修飾する関数の戻り値に2を掛ける関数です。
そのため、func関数を実行すると、まずは、3 * 2を計算します。
その計算結果に対してさらに2を掛けるので、(3 * 2) * 2となり、実行結果は12になります。
5.Javaとの比較
Javaには、デコレーターがないため、
この回では、Javaのソースコードとの比較はありません。
コメントの投稿
トラックバックURL
http://www.isl.ne.jp/cgi-bin/mt/mt-tb.cgi/1790