Znalazłem to pytanie, ponieważ chciałem zadać pytanie, dlaczego użycie funkcji zagnieżdżonych ma wpływ na wydajność. Przeprowadziłem testy następujących funkcji przy użyciu Pythona 3.2.5 na notebooku z systemem Windows z czterordzeniowym procesorem Intel i5-2530M 2,5 GHz
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
Zmierzyłem następujące 20 razy, również dla kwadratu1, kwadratu2 i kwadratu5:
s=0
for i in range(10**6):
s+=square0(i)
i otrzymałem następujące wyniki
>>>
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
nie ma funkcji zagnieżdżonej, square1
ma jedną funkcję zagnieżdżoną, square2
ma dwie funkcje zagnieżdżone i square5
ma pięć funkcji zagnieżdżonych. Zagnieżdżone funkcje są tylko deklarowane, ale nie są wywoływane.
Więc jeśli zdefiniowałeś 5 zagnieżdżonych funkcji w funkcji, której nie wywołujesz, to czas wykonania funkcji jest dwukrotnie dłuższy niż funkcji bez funkcji zagnieżdżonej. Myślę, że należy zachować ostrożność podczas korzystania z funkcji zagnieżdżonych.
Plik Pythona dla całego testu, który generuje te dane wyjściowe, można znaleźć pod adresem ideone .