【发布时间】:2020-05-14 17:21:41
【问题描述】:
我正在研究堆算法。 我认为堆算法作为函数会比纯代码慢。 所以我做了一个测试。但我发现函数式代码比纯代码快得多。 我觉得这很奇怪,我也不知道为什么。
import time
def heapify(heap):
for i in range(1, len(heap)):
while i != 0:
root = int((i - 1) / 2)
if heap[i] < heap[root]:
tmp = heap[i]
heap[i] = heap[root]
heap[root] = tmp
i = root
else:
break
return heap
heap = [5,2,5,0,11,12,7,8,10] * 10000
a = time.time()
for i in range(1, len(heap)):
while i != 0:
root = int((i - 1) / 2)
if heap[i] < heap[root]:
tmp = heap[i]
heap[i] = heap[root]
heap[root] = tmp
i = root
else:
break
b = time.time()
print("func code time :", b-a)
heap2 = [5,2,5,0,11,12,7,8,10] * 10000
a = time.time()
heap2 = heapify(heap2)
b = time.time()
print("pure code time :", b-a)
print(heap == heap2)
【问题讨论】:
-
你为什么会这样想?一般来说,局部函数作用域内的代码比完全使用全局作用域的代码要快,因为局部变量查找速度更快。请注意,这不是通常意义上的“功能性”。无论如何,再一次,为什么你期望它在函数内部会变慢?