LoginSignup
0
1

[Python] 関数の引数に関数を渡す際の注意点

Posted at

結論から言うと...

関数の引数に関数を渡した場合,実行時間が増えることがわかった(自明な気もするが).

特にループ処理内で 

FUNCTION(function, a, b, c...)

の形を作ると,実行時間に大きな差が生じるので注意が必要.

検証方法

以下のコードを実行した

import time

#足し算の関数
def my_add(a,b):
    return a+b

#関数my_funcを受け取り,my_func(x,y)を返す関数
def arg_func(my_func,x,y):
    return my_func(x,y)



#2数の和を返す関数
def no_arg_func(x,y):

    return x+y 


sum1=0
sum2=0

start1=time.time()
for i in range(1000):
   
    sum1=arg_func(my_add,sum1,1)

end1=time.time()


start2=time.time()
for j in range(1000):
    sum2=no_arg_func(sum2,1)

end2=time.time()

結果は以下の通り

0.00019788742065429688 ⬅️ 関数arg_func(...) に add_func(...)に渡した場合
0.0001430511474609375  ⬅️ 関数no_arg_func(...)内で直接足し算を行なった場合

関数の引数に関数を渡した場合,関数内に直接処理を書いた場合よりも約1.3倍時間がかかっていることがわかる.

終わりに

今回のは一例であり,forループの反復回数を変えると割合が変わる.
例えば,forループの回数が10の場合は実行時間に約3倍の差があるが,これが10^7回だと1.1倍の差しかない.他の条件によっても結果は変わると思う.

ただ,優先度が 実行速度>コードの可読性の場合は,関数を引数に渡さないのが無難だと思う

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1