ฉันพบคำถามนี้เพราะฉันต้องการตั้งคำถามว่าทำไมมีผลกระทบต่อประสิทธิภาพหากใช้ฟังก์ชันซ้อนกัน ฉันทดสอบการใช้งานฟังก์ชั่นต่อไปนี้โดยใช้ Python 3.2.5 ใน Windows Notebook พร้อมโปรเซสเซอร์ Quad Core 2.5 GHz Intel i5-2530M
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 ครั้งต่อไปนี้สำหรับสแควร์ 1, สแควร์ 2 และสแควร์ 5:
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
มีฟังก์ชั่นที่ซ้อนกันหนึ่งฟังก์ชั่นที่square2
ซ้อนกันสองฟังก์ชั่นและsquare5
มีห้าฟังก์ชั่นที่ซ้อนกัน ฟังก์ชั่นที่ซ้อนกันจะประกาศเท่านั้น แต่ไม่ได้เรียก
ดังนั้นหากคุณกำหนดฟังก์ชั่นซ้อนกัน 5 อันในฟังก์ชั่นที่คุณไม่ได้เรียกใช้เวลาในการดำเนินการของฟังก์ชั่นจะเป็นสองเท่าของฟังก์ชั่นที่ไม่มีฟังก์ชั่นซ้อนอยู่ ฉันคิดว่าควรระมัดระวังเมื่อใช้ฟังก์ชั่นที่ซ้อนกัน
แฟ้มงูใหญ่สำหรับการทดสอบทั้งที่สร้างผลลัพธ์นี้สามารถพบได้ที่ideone