Python: функциональная скорость кода выше скорости чистого кода. Почему? - PullRequest
4 голосов
/ 29 января 2020

Я изучаю алгоритм кучи. Я думал, что алгоритм кучи как функция будет медленнее, чем чистый код. Итак, я сделал тест. но я обнаружил, что функциональный код намного быстрее, чем чистый код. Я думаю, что это очень странно, и я не знаю почему.

введите описание изображения здесь

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)

1 Ответ

8 голосов
/ 29 января 2020

В CPython поиск локальных переменных оптимизирован в большей степени, чем поиск глобальных переменных, поэтому включение кода в функцию часто делает его работу быстрее, чем код уровня модуля.

В таблице времени для общих операций вы можете видеть, что read_local и write_local быстрее, чем их глобальные аналоги чтения / записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...