この質問を見つけたのは、ネストされた関数を使用するとパフォーマンスに影響がある理由を知りたかったからです。クアッド コア 2.5 GHz Intel i5-2530M プロセッサを搭載した Windows ノートブックで Python 3.2.5 を使用して、次の関数のテストを実行しました。
def square0(x):
return x*x
def square1(x):
def dummy(y):
return y*y
return x*x
def square2(x):
def dummy1(y):
return y*y
def dummy2(y):
return y*y
return x*x
def square5(x):
def dummy1(y):
return y*y
def dummy2(y):
return y*y
def dummy3(y):
return y*y
def dummy4(y):
return y*y
def dummy5(y):
return y*y
return x*x
次の 20 回、square1、square2、square5 についても測定しました。
s=0
for i in range(10**6):
s+=square0(i)
そして、次の結果を得ました
>>>
m = mean, s = standard deviation, m0 = mean of first testcase
[m-3s,m+3s] is a 0.997 confidence interval if normal distributed
square? m s m/m0 [m-3s ,m+3s ]
square0 0.387 0.01515 1.000 [0.342,0.433]
square1 0.460 0.01422 1.188 [0.417,0.503]
square2 0.552 0.01803 1.425 [0.498,0.606]
square5 0.766 0.01654 1.979 [0.717,0.816]
>>>
square0
ネストされた関数がない、ネストされた関数square1
が 1つある、square2
ネストされた関数が 2 つある、およびネストされた関数square5
が 5 つある ネストされた関数は宣言されるだけで、呼び出されません。
したがって、呼び出さない関数で 5 つのネストされた関数を定義した場合、関数の実行時間は、ネストされた関数を使用しない関数の 2 倍になります。ネストされた関数を使用するときは注意が必要だと思います。
この出力を生成するテスト全体の Python ファイルは、ideoneにあります。