Bu soruyu buldum çünkü iç içe geçmiş işlevler kullanılıyorsa neden performans etkisi olduğunu sormak istedim. Dört Çekirdekli 2.5 GHz Intel i5-2530M işlemciye sahip bir Windows dizüstü bilgisayarda Python 3.2.5 kullanarak aşağıdaki işlevler için testler yaptım
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
Aşağıdaki 20 kez kare1, kare2 ve kare5 için ölçtüm:
s=0
for i in range(10**6):
s+=square0(i)
ve aşağıdaki sonuçları aldı
>>>
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
yuvalanmış bir işlevi yoktur square1
, bir yuvalanmış işlevi square2
vardır, iki yuvalanmış işlevi vardır vesquare5
beş yuvalanmış işlevi vardır. İç içe geçmiş işlevler yalnızca bildirilir ancak çağrılmaz.
Dolayısıyla, çağırmadığınız bir işlevde 5 iç içe geçmiş işlev tanımladıysanız, işlevin yürütme süresi iç içe geçmiş bir işlev olmadan işlevin iki katıdır. İç içe geçmiş işlevleri kullanırken dikkatli olunması gerektiğini düşünüyorum.
Bu çıktıyı oluşturan tüm testin Python dosyası ideone'da bulunabilir .