こんにちは、今日もソフトウェアについてほのぼのと記載します。
現在、Udemyにて、Python学習を行っています。
今回はデコレータについて受講したのですが、
理解しずらかったのでメモしておきます。
デコレータとは、
関数が呼び出される前に
くっついている(デコレーション的な)関数を実行する
事をいいます。
例:
def printInf(func):
# 包み込むwrapper関数を作成
def wrapper(*args, **kwargs)
print(‘start’)
result= func(*args, **kwargs)
print(‘end’)
return result
return wrapper
@printInf
def adddata(x,y):
print(‘x+y’)
return x+y
# adddata()関数を実行します。
#その際に、デコレータ@printInfによってprintInf()関数が実行されます。
# printInf()の引数funcとして、adddata()関数のオブジェクトが渡されます
# (c言語で言う関数ポインタと考えるとわかりやすいです。)
r= adddata(10,20)
print(‘r:’, r)
こうすることで、関数呼び出し側は
adddata()だけですが、
実際には、デコレートするかたちで
printInf()が呼ばれます。
@関数名
がデコレーション発動条件ですかね。
def wrapper(*args, **kwargs)
の*argsはだけ今回は使われているということです。
この引数は、タプルなので
C言語的に言うと、書き込み出来ない配列のようなものになります。
このデコレータの良いところは、
関数自体変えずに済むのがうれしいんだろうと思います。
変えると不具合が入り込む可能性が出てくるので、よく考えられた仕組みですね。
Guido van Rossumさん天才か
0 件のコメント:
コメントを投稿