from timeit import Timer
def m1():
l = range(100000)
for i in l:
l[i] *= 2
def m2():
l = range(100000)
l = map(lambda i:i*2,l)
if __name__ == '__main__':
t1 = Timer('m1()','from __main__ import m1')
print t1.timeit(100)
t2 = Timer('m2()','from __main__ import m2')
print t2.timeit(100)
时间m2成本超过m1成本,你能解释一下原因吗?
和map函数的实现是什么,它是否使用迭代器?
由于
答案 0 :(得分:0)
在m2
中,计算是通过对lambda函数的函数调用来执行的。即使它是单行,它仍然有资格作为函数,因此具有函数调用的成本。
此外,m2
会创建一个新列表并将其分配给变量l
,还需要考虑创建该新列表的成本。
在m1
中,只有计算成本,因此m1
更快结束。
m1
步骤:
l
l
中的每个项目多为2 m2
步骤:
l
l
l