<p>因此,在Python这样的动态语言中,循环中函数调用的问题是,解释器每次都要评估引用,而且代价很高,特别是对于全局变量。但是,请注意,当您将内容设为本地时会发生什么:</p>
<pre><code>import time
def square(x):
return x*x
def test_loop(x):
res = []
for i in x:
res.append(square(i))
return res
def test_map(x):
return list(map(square,x))
def test_map_local(x, square=square):
return list(map(square,x))
def test_loop_local(x, square=square):
res = []
for i in x:
res.append(square(i))
return res
def test_loop_local_local(x, square=square):
res = []
append = res.append
for i in x:
append(square(i))
return res
def test_comprehension(x):
return [square(i) for i in x]
def test_comprehension_local(x, square=square):
return [square(i) for i in x]
x = range(1,10000000)
start = time.time()
test_loop(x)
stop = time.time()
print("Loop:", stop - start,"seconds")
start = time.time()
test_loop_local(x)
stop = time.time()
print("Loop-local:", stop - start, "seconds")
start = time.time()
test_loop_local_local(x)
stop = time.time()
print("Loop-local-local:", stop - start, "seconds")
start = time.time()
test_map(x)
stop = time.time()
print("Map:", stop - start, "seconds")
start = time.time()
test_map_local(x)
stop = time.time()
print("Map-local:", stop - start, "seconds")
start = time.time()
test_comprehension(x)
stop = time.time()
print("Comprehesion:", stop - start, "seconds")
start = time.time()
test_comprehension_local(x)
stop = time.time()
print("Comprehesion-local:", stop - start, "seconds")
</code></pre>
<p>结果:</p>
^{pr2}$
<p>所以,让函数在map local中查找并没有真正的帮助,正如我所期望的那样,因为map在一开始只进行一次查找。真正让我吃惊的是,理解和理解之间似乎有一个不可忽视的区别。不过,不确定这是否只是噪音。在</p>