引数をプリントする関数
def funcA(x):
print(x)
#実行
funcA(25)
25
何もしないデコレーター関数を定義
def overwrite(func): # 関数のアドレスを受け取る
def wrapper(x): # 変更内容、今回は「何もしない」
pass
return wrapper # 関数の実行部分のアドレスを返す
先の関数 funcA を overwrite でデコレートする
@overwrite
def funcA(y):
print(y)
#実行
funcA(30)
何も起きない(overwrite関数のpassが実行された)
@ デコレーター は、機能を付加するという解説だが、funcAが実行されないということは、もとの関数を置き換えてしまうらしい。
元の関数を実行するには、デコレーター関数内で、明示的に実行させないといけない、のか?
@デコレーターを初めから書く
def overwrite(func):
def wrapper(x): # 書き換え関数の宣言
func(x) # 呼び出し元の関数を「実行」させる
return wrapper # 上書き関数のアドレスを返す
@overwrite #デコレーター宣言(呼び出し)
def funcA(y):
print(y)
funcA(30)
結果、funcAは実行されず、overwiteが呼び出され→呼ばれてないのにwrapperが実行される→(その中でfuncAが実行)
30
つまり、自分を呼び出す関数を作って、それで自分を上書きして、その関数を呼び出す?のか?
overwriteの中のwrapperは自動で呼ばれるのはそれで良いんだっけ?
関数の中で定義された関数は自動で呼ばれるんだっけか?
関数をもう一度確認しなければ! 何も理解していない、覚えていない(泣)
コメント