python中带参数的时间函数

时间:2016-03-10 06:19:02

标签: python function python-3.x time

我有一个带字符串的函数作为参数返回两个列表

e.g。

def return_words(string):
    return list1, list2

显然中间有代码。我希望能够准确地为各种字符串计时这个函数,因为我需要在输入长字符串时提高效率。

很抱歉,如果这是一个微不足道的问题,因为我是python的新手。

由于

3 个答案:

答案 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)))