首页 > 解决方案 > Python:函数式代码速度比纯代码速度更快。为什么?

问题描述

我正在研究堆算法。我认为堆算法作为函数会比纯代码慢。所以我做了一个测试。但我发现函数式代码比纯代码快得多。我觉得这很奇怪,我不知道为什么。

在此处输入图像描述

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)

标签: pythonheap

解决方案


在 CPython 中,局部变量查找比全局变量查找更优化,因此将代码放在函数中通常使其运行速度比模块级代码快。

常用操作的时序表中,您可以看到 read_local 和 write_local 比它们的全局读/写对应物更快。


推荐阅读