我发现这个问题是因为我想提出一个问题,为什么如果使用嵌套函数会对性能产生影响。我在配备四核 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
有一个嵌套函数,square2
有两个嵌套函数,square5
有五个嵌套函数。嵌套函数只声明但不调用。
因此,如果您在一个未调用的函数中定义了 5 个嵌套函数,则该函数的执行时间是没有嵌套函数的函数的两倍。我认为在使用嵌套函数时应该谨慎。
生成此输出的整个测试的 Python 文件可以在ideone找到。