我有一个带字符串的函数作为参数返回两个列表
e.g。
def return_words(string):
return list1, list2
显然中间有代码。我希望能够准确地为各种字符串计时这个函数,因为我需要在输入长字符串时提高效率。
很抱歉,如果这是一个微不足道的问题,因为我是python的新手。
由于
答案 0 :(得分:2)
您可以使用timeit
模块并传递timeit
的{{1}}参数中的参数:
setup
演示:
from timeit import timeit
inp = """
def return_words(string):
return list1, list2
return_words(string)
"""
for s in list_of_inputs:
print '{}'.format(s), '->', timeit(stmt=inp,
number=1000000,
setup="string = '{}'".format(s))
输出:
inp = """
def return_words(string):
return [i for i in string if i.isdigit()]
return_words(string)
"""
list_of_inputs = ['inputstring1', 'inp2']
for s in list_of_inputs:
print '{}'.format(s), '->', timeit(stmt=inp,
number=1000000,
setup="string = '{}'".format(s))
注意 inputstring1 -> 0.986068964005
inp2 -> 0.548749923706
也接受一个函数作为代码中定义的第一个参数,但是你不能将参数传递给它。在这种情况下,最好创建一个使用相对参数调用函数的包装器。请阅读http://pythoncentral.io/time-a-python-function/了解详情。
答案 1 :(得分:1)
在Python 3.7中,有一个新的nanosecond timer:
>>> st={time.time_ns() for e in range(10000000)}
>>> (max(st)-min(st))/10**9
2.275888
所以距离计数器(并多次调用time.time_ns()
)到10,000,000需要2.275888秒...
还有一个纳秒级精度性能计时器(range
部分需要多长时间?)
>>> t1=time.perf_counter_ns(); x={y for y in range(10000000)}; t2=time.perf_counter_ns()
>>> (t2-t1)/10**9
0.860256448
或timeit模块:
>>> timeit.timeit("x={_ for _ in range(10000000)}",number=1)
0.7478707919999579
答案 2 :(得分:0)
另一种选择是使用时间和时间。您可以修改以下代码
import time
from datetime import timedelta
start_time = time.time()
//do stuff
end_time = time.time()
time_slice = end_time - start_time
human_time = str(timedelta(seconds=int(time_slice)))