[英]Python timeit.timeit - snippet version of sort runs faster than using lambda, why?
I'm trying to measure the time of sorting using timeit.timeit for code in two versions - snippet or normal using lambda:我正在尝试使用 timeit.timeit 测量两个版本中代码的排序时间 - 使用 lambda 的代码片段或正常:
bubble='''
elements = [1,22,4,632,12,3432,54531,2,2,2,2,2,4,54,3,2,1,54,43,11,22,32]
def bubble_sort(elements):
n=0
for i in range(len(elements)-n):
for j in range(len(elements)-1):
if elements[j]>elements[j+1]:
elements[j+1],elements[j] = elements[j], elements[j+1]
n+=1
return elements
'''
and normal:和正常:
elements = [1,22,4,632,12,3432,54531,2,2,2,2,2,4,54,3,2,1,54,43,11,22,32]
def bubble_sort(elements):
n=0
for i in range(len(elements)-n):
for j in range(len(elements)-1):
if elements[j]>elements[j+1]:
elements[j+1],elements[j] = elements[j], elements[j+1]
n+=1
return elements
When i run timeit.timeit(stmt=bubble, number=1000)
it give me result of 0.00026829999978872365 but when I use当我运行
timeit.timeit(stmt=bubble, number=1000)
它给我的结果 0.00026829999978872365 但是当我使用
t = Timer(lambda: bubble_sort(elements))
print(t.timeit(number = 1000))
it gives 0.04926030000024184 which is much slower.它给出了 0.04926030000024184 这要慢得多。 Can someone explain me why?
有人可以解释我为什么吗?
To confirm @Craig's astute observation, actually calling the function within the snippet version confirms they're pretty much exactly as fast.为了确认@Craig 的敏锐观察,实际上在代码片段版本中调用 function 确认它们几乎完全一样快。
import timeit
bubble='''
def bubble_sort(elements):
n=0
for i in range(len(elements)-n):
for j in range(len(elements)-1):
if elements[j]>elements[j+1]:
elements[j+1],elements[j] = elements[j], elements[j+1]
n+=1
return elements
bubble_sort([1,22,4,632,12,3432,54531,2,2,2,2,2,4,54,3,2,1,54,43,11,22,32])
'''
def bubble_sort(elements):
n=0
for i in range(len(elements)-n):
for j in range(len(elements)-1):
if elements[j]>elements[j+1]:
elements[j+1],elements[j] = elements[j], elements[j+1]
n+=1
return elements
print(timeit.timeit(stmt=bubble, number=10000))
print(timeit.timeit(stmt=lambda: bubble_sort([1,22,4,632,12,3432,54531,2,2,2,2,2,4,54,3,2,1,54,43,11,22,32]), number=10000))
print(timeit.timeit(stmt=lambda: list(sorted([1,22,4,632,12,3432,54531,2,2,2,2,2,4,54,3,2,1,54,43,11,22,32])), number=10000))
And, of course, that you shouldn't be rolling your own bubble sort except for practice.而且,当然,除了练习之外,您不应该滚动自己的冒泡排序。
0.569853096
0.5863851120000001
0.00920665399999998
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.