以 int 范围作为函数参数的 Timeit
Timeit with range of int as parameter for function
我想用范围为 (0,30) 作为参数的 timeit 来比较函数的执行时间,所以我可以将每个调用的执行时间与不同的参数存储在一个列表中。
此重复函数调用(默认情况下)函数 5 次,而不是返回所有参数 0 到 30
的时间
times = timeit.repeat("for x in range(30): foo(x)", "from __main__ import foo",
number=100)
那么如何将参数传递给函数并获取每个参数的执行时间?
这是一个例子:
from time import sleep
from timeit import timeit
def foo(x):
sleep(1/(x+1))
n = 1
print(list([timeit(lambda: foo(x), number=n) / n] for x in range(30)))
结果:
[[1.0116304], [0.5029303], [0.34732699999999994], [0.2513573], etc.]
它 运行s timeit
foo(0)
,然后 foo(1)
,等等。它 运行s 它 n
次(你可以将其设置为 100) 并将结果除以 n
以获得每个 运行 平均花费的时间。
list()
在那里,因为它只会在那里打印生成器对象,否则 - 方括号也可以。
我认为 lambda:
是您想要的部分。它允许您传入要传入的参数,而不必更改 timeit
的调用方式,因为 timeit
期望传入要调用的函数,因此您不能传入 foo(x)
(因为那只会评估为 None
,函数结果)。
我想用范围为 (0,30) 作为参数的 timeit 来比较函数的执行时间,所以我可以将每个调用的执行时间与不同的参数存储在一个列表中。 此重复函数调用(默认情况下)函数 5 次,而不是返回所有参数 0 到 30
的时间times = timeit.repeat("for x in range(30): foo(x)", "from __main__ import foo",
number=100)
那么如何将参数传递给函数并获取每个参数的执行时间?
这是一个例子:
from time import sleep
from timeit import timeit
def foo(x):
sleep(1/(x+1))
n = 1
print(list([timeit(lambda: foo(x), number=n) / n] for x in range(30)))
结果:
[[1.0116304], [0.5029303], [0.34732699999999994], [0.2513573], etc.]
它 运行s timeit
foo(0)
,然后 foo(1)
,等等。它 运行s 它 n
次(你可以将其设置为 100) 并将结果除以 n
以获得每个 运行 平均花费的时间。
list()
在那里,因为它只会在那里打印生成器对象,否则 - 方括号也可以。
我认为 lambda:
是您想要的部分。它允许您传入要传入的参数,而不必更改 timeit
的调用方式,因为 timeit
期望传入要调用的函数,因此您不能传入 foo(x)
(因为那只会评估为 None
,函数结果)。