Выражение Tuple vs Generator. Почему производительность меняется, чем дольше получается последовательность? - PullRequest
0 голосов
/ 05 апреля 2019

Я просматривал следующий код и думал, что заметил потенциальную проблему с производительностью.

def multiply(x):
    return x * 10

def test():
    data = tuple(x for x in range(5))

    first_map = tuple(map(
        multiply,
        tuple(x for x in data)
    ))
    second_map = tuple(map(
        multiply,
        tuple(x for x in data)
    ))

    ziped = tuple(zip(data, second_map, first_map))
    return ziped

import timeit
print(timeit.timeit('test()', globals=globals()))

Запуск этой печати 5.317162958992412 для меня.

Я думал, что все эти промежуточные tuple вызовет многократные итерации по данным, и поэтому я превратил это в следующее.

def multiply(x):
    return x * 10

def test():
    data = tuple(x for x in range(5))

    first_map = map(
        multiply,
        (x for x in data)
    )
    second_map = map(
        multiply,
        (x for x in data)
    )

    ziped = tuple(zip(data, second_map, first_map))
    return ziped

import timeit
print(timeit.timeit('test()', globals=globals()))

И на самом деле, запустив эту распечатку 4.783027238998329 для меня, мы оптимизировали производительность.Ууу!

Но теперь наступает удивительная (для меня) часть! .По мере масштабирования данных результаты переворачиваются!

Другими словами, если мы изменим data на data = tuple(x for x in range(50)), то версия с промежуточными кортежами станет более быстрой.

Чего мне не хватает?

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