#はじめに
この記事は超初心者の覚書です。
言語はPython3系。
#decoratorの定義
def decorator1(func):
~何らかの処理~
があったとして、
…
@decorator1
def kansuu(~):
~何らかの処理~
と
def kansuu(~):
~何らかの処理~
kansuu = decorator1(kansuu)
は全く同じ意味です。
#練習問題をやってみよう
このままでは物足りないので、簡単に練習問題を書いてみました。
##問題
次のコードの実行結果を答えてください。
(直後に答えを書きます)
def decorator1(func):
def wrapper(text):
print('1')
func(text)
print('2')
print('text:'+text)
print('3')
return wrapper
@decorator1
def myouzi(name):
print('私の名字は「'+name[0:2]+'」です。')
myouzi('浦島太郎')
##答え
1
私の名字は「浦島」です。
2
text:浦島太郎
3
##解説
最初に書いたようにデコレータを書き換えてみます
def decorator1(func):
def wrapper(text):
print('1')
func(text)
print('2')
print('text:'+text)
print('3')
return wrapper
def myouzi(name):
print('私の名字は「'+name[0:2]+'」です。')
myouzi = decorator1(myouzi) #ここがミソ
myouzi('浦島太郎')
すると、myouzi('浦島太郎')
で呼び出されるのは、
print('1')
print('浦島太郎'[0:2]) #元のmyouzi関数の処理
print('2')
print('text:'+'浦島太郎')
print('3')
となります。
myouzi
にはdecorator1
内のwrapper関数
のfunc関数
がmyouzi関数
に置き換わったものがdecorator1(myouzi)
の戻り値として代入されるからです。
(いい加減&文法的に間違ってそうな説明でごめんなさい)
#終わりに
当方超初心者のため間違っている説明やわかりにくいところがあると思うのでその際は遠慮なく指摘お願いします。