元组与生成器表达式。为什么性能下降,序列越长?

时间:2019-04-05 12:42:23

标签: python performance tuples generator

我在看下面的代码,以为我注意到了潜在的性能问题。

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)),则具有中间元组的版本会变得更快。

我想念什么?

0 个答案:

没有答案