当阅读关于Loop vs List comprehension对Map的速度的文章时,我通常会发现列表理解在使用lambda函数时比map更快。
这是我正在运行的测试:
import timeit
def square(range):
squares = []
for number in range:
squares.append(number*number)
return squares
print(timeit.timeit('map(lambda a: a*a, range(100))', number = 100000))
print(timeit.timeit('[a*a for a in range(100)]', number = 100000))
print(timeit.timeit('square(range(100))', 'from __main__ import square', number = 100000))
结果:
0.03845796199857432
0.5889980600004492
0.9229458660011005
所以Map是使用lambda函数的明显赢家。 python 3.7是否有变化导致这种显着的速度提升?
首先,要进行票价比较,您必须将map
函数的结果转换为列表。 Python 3.X中的map
返回迭代器对象而不是列表。其次,在CPython实现中,内置函数实际上是围绕c函数的包装器,这使得它们比具有相同功能的任何Python代码更快,尽管当你在内置函数中使用lambda
时,你实际上正在破坏链,这将使它大约和Python代码一样快。
另一个重要的一点是,列表理解只是一个常规循环的语法糖,你可以使用它来避免额外的函数调用,如附加到列表等。