我在看下面的代码,以为我注意到了潜在的性能问题。
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))
,则具有中间元组的版本会变得更快。
我想念什么?