一人前のオブジェクトとしての函数
関数もオブジェクト
Pythonでは、全てのものがオブジェクトです。変数に関数を代入したり、ほかの函数の引数として関数を使ったり、関数からの戻り値として関数を返したりできる
ほかの言語の多く難しいか不可能なことをPythonではおこなえる。
簡単なサンプルから
def answer():
print(42)
実行すると
answer()
42
def run_something(func):
func()
この関数は、実行する関数を示すfuncと言う名前の引数を取る。この関数にanswerに渡すと、ほかのデーター型と同様に、関数をデーターとして扱っている
run_something(answer)
42
answer()ではなくanswerを渡したことに注意しよう。Pythonでは、かっこは関数呼び出しを意味する。かっこがなければ、Pythonは関数をほかのオブジェクと同じように扱う
次のサンプル
def add_args(arg1, arg2):
print(arg1 + arg2)
それから
def run_something_with_args(func, arg1, arg2):
func(arg1, arg2)
これで run_something_with_argsを実行してみる
run_something_with_args(add_args, 5, 9)
14になる
*arg,**argsも使える
def sum_args(*args):
return sum(args)
それから
def run_with_positional_args(func, *args):
return func(*add_args)
これで run_with_positional_argsを実行してみる
rrun_with_positional_args(sum_args, 1, 2, 3, 4)
10になる