デコレーターとは

def show_func_name(func):
  def wrapper(*args, *kwargs):
    print(func.name, ‘を実行します’)
    return func(args, **kwargs)
  return wrapper

if name == ‘main‘:
  print(‘関数名’, len.name) # ‘関数名 len’と出力
  new_len = show_func_name(len)
  new_len([]) # ‘len を実行します’と出力

関数の中に関数を定義して、その定義した関数を返すことにより、「実行すると関数を返す関数」が作成できます

ここで def wrapper(*args, *kwargs): となる理由

デコレータを実装する場合は *args**kwargs は必要。
理由は、デコーレータを付ける対象の関数は自由なため、デコレータの実装時には引数を決められないため。だそうです。

ログイン - Pythonのオンライン学習サービスPyQ(パイキュー)

@を使った方法

from decorator1 import show_func_name

@show_func_name
def talk(message):
print(message)

関数show_func_nameは、decorator1.pyで以下のように定義されている場合には、このように@を使って使用できる。

他の方法

def talk(message):
  print(message)
talk = show_func_name(talk)

コメント

タイトルとURLをコピーしました