Python関数の書き方
Shayne Miel
Software Architect @ Duo Security





@double_args def multiply(a, b): return a * bmultiply(1, 5)
20
def multiply(a, b): return a * bdef double_args(func): return funcnew_multiply = double_args(multiply)new_multiply(1, 5)
5
multiply(1, 5)
5
def multiply(a, b): return a * bdef double_args(func):# 変更用の新しい関数を定義 def wrapper(a, b):# まずは未変更の関数を呼ぶ return func(a, b)# 新しい関数を返す return wrappernew_multiply = double_args(multiply)new_multiply(1, 5)
5
def multiply(a, b): return a * bdef double_args(func): def wrapper(a, b):# 渡された関数を呼ぶが、各引数を2倍にする return func(a * 2, b * 2)return wrappernew_multiply = double_args(multiply)new_multiply(1, 5)
20
def multiply(a, b): return a * bdef double_args(func): def wrapper(a, b): return func(a * 2, b * 2) return wrappermultiply = double_args(multiply)multiply(1, 5)
20
multiply.__closure__[0].cell_contents
<function multiply at 0x7f0060c9e620>
def double_args(func): def wrapper(a, b): return func(a * 2, b * 2) return wrapperdef multiply(a, b): return a * b multiply = double_args(multiply) multiply(1, 5)
20
def double_args(func): def wrapper(a, b): return func(a * 2, b * 2) return wrapper@double_args def multiply(a, b): return a * b multiply(1, 5)
20
Python関数の書き方