戻り値の型を表示する
友人たちと一緒に作業しているパッケージをデバッグしています。ある関数から返ってくるデータに不思議な挙動があり、どの関数が原因なのかもはっきりしません。関数がある型を返すと想定していたのに、実際は別の型を返してしまうと、バグが紛れ込むことがあります。たとえば、関数がnumpyの配列を返すと期待していたのに、実際はリストを返すと、思わぬ動作になることがあります。これが原因でないことを確かめるため、任意の関数に適用して、その関数呼び出しごとに返される変数の型を表示するデコレータ print_return_type() を作成することにしました。
この演習はコースの一部です
Python関数の書き方
演習の手順
- ネストした関数
wrapper()を作成し、新しいデコレート後の関数にします。 - デコレート対象の関数を呼び出します。
- 新しいデコレート後の関数を返します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
def print_return_type(func):
# Define wrapper(), the decorated function
____ ____(____, ____):
# Call the function being decorated
result = ____(____, ____)
print('{}() returned type {}'.format(
func.__name__, type(result)
))
return result
# Return the decorated function
return ____
@print_return_type
def foo(value):
return value
print(foo(42))
print(foo([1, 2, 3]))
print(foo({'a': 42}))