Tôi tìm thấy câu hỏi này vì tôi muốn đặt ra một câu hỏi tại sao có tác động hiệu năng nếu một người sử dụng các hàm lồng nhau. Tôi đã chạy thử nghiệm các chức năng sau bằng Python 3.2.5 trên Máy tính xách tay Windows với bộ xử lý Intel Core i5-2530M Quad Core 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
Tôi đã đo 20 lần sau đây, cũng cho hình vuông1, hình vuông2 và hình vuông5:
s=0
for i in range(10**6):
s+=square0(i)
và nhận được kết quả như sau
>>>
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
không có chức năng lồng nhau, square1
có một chức năng lồng nhau, square2
có hai chức năng lồng nhau và square5
có năm chức năng lồng nhau. Các hàm lồng nhau chỉ được khai báo nhưng không được gọi.
Vì vậy, nếu bạn đã xác định 5 chức năng lồng nhau trong một hàm mà bạn không gọi thì thời gian thực hiện của hàm là hai lần của hàm mà không có hàm lồng nhau. Tôi nghĩ nên thận trọng khi sử dụng các hàm lồng nhau.
Tệp Python cho toàn bộ bài kiểm tra tạo đầu ra này có thể được tìm thấy tại ideone .