python计时器timeit返回秒数_python计时函数timeit.timeit()使用小结

Python提供了一个timeit.timeit()函数用于计算函数的运行时间,这使得我们在项目开发中很方便的设计profiling并根据结果做相应的优化, 其定义如下:

timeit.timeit(stmt='pass', setup='pass', timer=, number=1000000)

Create a Timer instance with the given statement, setup codeand timer function andrun its timeit() method with number executions.

Newin version 2.6.

例如,假设我们在某个项目中要统计并存储访问过的url,一个可能的实现如下所示:

1 classUrlStatistics:2 def __init__(self):3 self.visitedSites =dict()4

5 defvisit(self, url):6 if url inself.visitedSites:7 self.visitedSites[url] += 1

8 else:9 self.visitedSites[url] = 1

10

11 def mostFrequentVisitedSites(self, n=10):12 sortedSites =sorted(self.visitedSites.items(),13 key=lambda pair: pair[1], reverse=True)14 return [(url, visits) for url, visits in sortedSites[:n]]

上面示例代码中用一个dict变量存储所有访问过的url(line 2), 函数visit() 将每一个新访问的的url计入我们的统计当中(line5~9), 函数mostFrequentVisitedSites()返回访问最频繁的前十名url(line 11~14). 为了使用timeit.timeit()函数计算visit()或mostFrequentVisitedSites()执行效率,我们需要让该函数反复执行,因此我们还需要以某种方式来反复得到不同或相同的URL。 下面的get_url_name()函数随机从英文字母表选取3-7个字符并拼接成URL, test_visit()函数用于调用UrlStatistics.visit(), 最后我们用timeit.timeit()调用test_visit()函数并设定调用次数,最后得到运行时间:

1 defget_url_name():2 prefix = 'www'

3 suffix = 'com'

4 name = ''.join([random.choice(string.ascii_lowercase)5 for i in range(random.randint(3, 7))])6 return '.'.join([prefix, name, suffix])7

8

9 deftest_visit():10 urlStats =UrlStatistics()11 urlStats.visit(get_url_name())12

13

14 if __name__ == '__main__':15 print(timeit.timeit('test_visit()',16 setup='from __main__ import test_visit',17 number=600000))

结果如下:

stephenw@stephenw-devbox1:~/pyTest$ ./timeitTest.py8.078887998002756

考虑到python中collections模块中的defaultdict可以让visit()函数看上去更简洁,我们可做如下修改:

classUrlStatistics:def __init__(self):

self.visitedSites=defaultdict(int)defvisit(self, url):

self.visitedSites[url]+= 1

相应的,由timeit.timeit()得到的运行时间为 8.326297112002067, 可见使用defaultdict()后,效率降低了

最后,timeit模块还提供了命令行接口来实现同样的功能(结果和上面略有差异):

stephenw@stephenw-devbox1:~/pyTest$ python -m timeit -n 600000 "from timeitTest import test_visit; test_visit()"

600000 loops, best of 3: 9.83 usec per loop

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python,有多种方法可以实现计时器功能。以下是其几种常用的方法: 方法1: 使用time模块计时。可以使用time.time()函数获取当前时间戳,通过记录开始时间和结束时间的时间戳差来计算程序运行时间。以下是示例代码: ```python import time start_time = time.time() # 执行代码 end_time = time.time() elapsed_time = end_time - start_time print("程序运行时间:", elapsed_time, "秒") ``` 方法2: 使用datetime模块计时。可以使用datetime.datetime.now()函数获取当前时间,通过记录开始时间和结束时间的时间差来计算程序运行时间。以下是示例代码: ```python import datetime start_time = datetime.datetime.now() # 执行代码 end_time = datetime.datetime.now() elapsed_time = end_time - start_time print("程序运行时间:", elapsed_time) ``` 方法3: 使用timeit模块计时。可以使用timeit.default_timer()函数获取当前时间,通过记录开始时间和结束时间的时间差来计算程序运行时间。以下是示例代码: ```python import timeit start_time = timeit.default_timer() # 执行代码 end_time = timeit.default_timer() elapsed_time = end_time - start_time print("程序运行时间:", elapsed_time, "秒") ``` 方法4: 使用perf_counter()计时。可以使用time.perf_counter()函数获取当前时间,通过记录开始时间和结束时间的时间差来计算程序运行时间。以下是示例代码: ```python import time start_time = time.perf_counter() # 执行代码 end_time = time.perf_counter() elapsed_time = end_time - start_time print("程序运行时间:", elapsed_time, "秒") ``` 以上是几种常用的计时器方法,你可以根据自己的需求选择合适的方法来实现计时功能。123 #### 引用[.reference_title] - *1* *3* [手把手教你实现一个 Python 计时器](https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/125512226)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *2* [python 计时器](https://blog.csdn.net/qq_42751978/article/details/129948414)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值