这段代码需要帮助
import timeit
mysetup=""
mycode='''
def gener():
...my code here...
return x
'''
# timeit statement
print (timeit.timeit(setup = mysetup,
stmt = mycode,
number = 1000000))
print("done")作为结果,我得到了0.0008606994517737132,因为我读到这个单位是在“秒”,所以我的功能执行100万次在0.8毫秒?我觉得这不是真的,太快了。
我也尝试了基本的选择
start = time.time()
my code here
end = time.time()
print(end - start)一次执行了0.23901081085205078次,看起来有点慢…
我做错什么了?谢谢
发布于 2017-12-14 10:02:26
在mycode中为timeit方法定义这个函数的方式,只会定义gener函数,而不是运行函数。您需要在代码块中运行该函数,以便报告执行所需的时间。
至于什么时间长度是合理的(太快/太慢),这在很大程度上取决于您的代码正在做什么。但我怀疑您已经在方法2中执行了函数,并且只在方法1中定义了它,因此出现了差异。
编辑:示例代码
为了说明不同之处,在下面的示例中,code1只定义了一个函数,它不执行它。块code2定义并执行函数。
import timeit
code1 = '''
def gener():
time.sleep(0.01)
'''
code2 = '''
def gener():
time.sleep(0.01)
gener()
'''我们应该期望运行time.sleep(0.01) 100次,大约需要1秒。为timeit运行code1返回~10^-5秒,因为函数gener实际上没有被调用:
timeit.timeit(stmt=code1, number=100)为timeit运行code2将返回~1秒的预期结果:
timeit.timeit(stmt=code2, number=100)此外,setup参数的要点是进行安装(代码中不打算计时的部分)。如果希望timeit捕获gener的执行时间,则应使用以下命令:
import timeit
setup = '''
def gener():
time.sleep(0.01)
'''
stmt = "gener()"
timeit.timeit(setup=setup, stmt=stmt, number=100)这将返回运行gener 100次所需的时间,不包括定义它所需的时间。
发布于 2019-04-26 12:14:47
下面是一种测量代码段时间的通用方法。
import time
class timer(object):
"""
A simple timer used to time blocks of code. Usage as follows:
with timer("optional_name"):
some code ...
some more code
"""
def __init__(self, name=None):
self.name = name
def __enter__(self):
self.start = time.time()
return self
def __exit__(self, *args):
self.end = time.time()
self.interval = self.end - self.start
if self.name:
print("{} - Elapsed time: {:.4f}s".format(self.name, self.interval))
else:
print("Elapsed time: {:.4f}s".format(self.interval))gist可在此处获得:https://gist.github.com/Jakobovski/191b9e95ac964b61e8abc7436111d1f9
发布于 2017-12-14 10:11:59
如果您想计时一个函数时间,可以这样使用它:
# defining some function you want to time
def test(n):
s = 0
for i in range(n):
s += i
return s
# defining a function which runs the function to be timed with desired input arguments
timed_func = lambda : test(1000)
# the above is done so that we have a function which takes no input arguments
N = 10000 # number of repeats
time_per_run = timeit.timeit(stmt=timed_func, number=N)/N就你的情况而言,你可以:
# defining some function you want to time
def gener():
...my code here...
return x
N = 1000000 # number of repeats
time_per_run = timeit.timeit(stmt=gener, number=N)/N任何库的导入都可以在调用timeit函数之前在全局完成,而timeit将使用全局导入的库。
例如:
import numpy as np
# defining some function you want to time
def gener():
...my code here...
x = np.sqrt(y)
return x
N = 1000000 # number of repeats
time_per_run = timeit.timeit(stmt=gener, number=N)/Nhttps://stackoverflow.com/questions/47810404
复制相似问题