関数にタグを付ける
何かにタグ付けするとは、その対象にラベルとして機能する1つ以上の文字列を付けることです。たとえば、あとで検索できるように、メールや写真にタグを付けることがありますよね。そこで、任意のタグ一覧で関数にタグを付けられるデコレータを書くことにしました。これらのタグは次のようにさまざまな用途に使えます。
- その関数に誰が関わったかという情報を追加して、ユーザーが利用時に困ったら誰に質問すればよいか分かるようにする。
- 関数を「experimental」としてラベル付けし、将来入力や出力が変わる可能性があることをユーザーに知らせる。
- 将来のバージョンで削除予定の関数をマークする。
- など。
この演習はコースの一部です
Python関数の書き方
演習の手順
- 返す新しいデコレータ
decorator()を定義します。 - デコレート後の関数がメタデータを保持するようにします。
- デコレート対象の関数を呼び出し、その結果を返します。
- 新しいデコレータを返します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
def tag(*tags):
# Define a new decorator, named "decorator", to return
def ____(____):
# Ensure the decorated function keeps its metadata
@____(____)
def wrapper(*args, **kwargs):
# Call the function being decorated and return the result
return ____(____, ____)
wrapper.tags = tags
return wrapper
# Return the new decorator
return ____
@tag('test', 'this is a tag')
def foo():
pass
print(foo.tags)