博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[python] time 模块 -- 时间显示与程序计时
阅读量:7227 次
发布时间:2019-06-29

本文共 2064 字,大约阅读时间需要 6 分钟。

hot3.png

在日常编程时,我们经常会需要使用并输出系统当时的时间,或者是测量一个程序的运行时长。而这个时候,我们就需要用到 python 官方模块的 time 模块。

下面是 time 模块中的几个常用的函数:

1. time() 函数与程序计时

time() 是一个最基础的函数。它返回一个以秒为单位的时间。先放一个实例测试一下。

>>> import time>>> time.time()1533368014.331627

可以看到它返回的值比较大。其实 time() 函数返回的是自1970年1月1日以来所经历的数,因为可读性比较差,所以我们一般不会去使用它。当然, time() 函数有一个比较常见的运用,就是程序计时。比如说,你要测量一个循环所消耗的时间,就可以这么写:

from time import *ls = [1, 2, 3, 4, 5]start = time()for item in ls:    print(item)end = time()print(end - start)

运行结果:

123450.0019230842590332031

可见,循环打印了五次的耗时大概是 0.002 秒。许多的算法有着大量的循环,一般循环耗时会很大,而如果需要检测一个算法的优化程度,测量运行时长是一个非常有效的标准。

2. perf_counter() - 更精确地计时

当然,当你对测量的精度要求不高时, time() 函数足以使用。但是如果你想更准确地计时,可以使用 perf_counter() 函数。 perf_counter() 函数返回的是CPU计时的精确时间,单位也是秒。

当用了 perf_counter() 函数之后,上面的结果变为了 0.002030177987762727

3. sleep() - CPU要休息一下了

time模块中有一个比较常用的函数 sleep(s) ,它可以让程序暂停 s 秒。这个功能在进行无限循环时可以控制循环频率(比如说爬虫)。不过, sleep(1) 并不代表这个程序正好暂停了1s,我们可以用上面介绍的计时程序来测试一下。

from time import *ls = [1, 2, 3, 4, 5]start = perf_counter()sleep(1)end = perf_counter()print(end - start)
1.0043321669945726

当然误差并不算太大,但是当 sleep() 的时间特别短的时候,就不能很准确地暂停。

4. ctime() - 文本化输出时间

既然 time() 函数显示当前时间的格式较差,那么 time 模块有没有能够用易读的方式输出时间的函数呢?难道要按照秒数自己去算吗?

哈哈, python 这么万能,这当然已经被考虑进去了。 ctime() 这个函数就可以将当前时间按照字符串格式输出。

>>> time.ctime()'Sat Aug4 15:58:56 2018'

嗯,这样看起来是不是好多了。但是假如你不习惯年份在后的形式,也不想输出星期几,而是想要输出 2018 08 04 16:00 这样的格式, ctime() 便不能满足我们对于时间格式化的要求了。所以我们需要学习“格式化输出”时间。

5. strftime() 的格式化 与 localtime() / gmtime()

首先是 strftime(string, time_t) 这个函数,其中 string 参数为格式化的字符串,它有以下几种格式,是不是看着很像 C 里面 printf() 函数的格式化?

  • %Y 年份

  • %m 月份数字

  • %B 月份名称

  • %b 月份名称缩写

  • %d 日期

  • %A 星期

  • %a 星期缩写

  • %H 24小时制时间

  • %h 12小时制时间

  • %p AM/PM

  • %M 分钟

  • %S 秒

介绍完了 string 的格式,那么 time_t 呢? time_t 这个参数需要的是时间结构体,这个不需要我们完成,我们可以调用 localtime() 这个函数来直接获得。(当然了, gmtime() 这个函数也可以返回一个时间结构体,但是它是标准时间,中国是 UTC +8 时间。所以用 gmtime() 会比正常时间慢八小时)

所以比如说我们要输出类似于 2018 08 04 16:00 这样的时间格式,我们只需要用以下的代码:

>>> time.strftime("%Y %m %d %H:%M", time.localtime())'2018 08 04 16:24'

这样就实现了自定义时间文本输出的功能了。

结语与其他文档

关于 time 模块的使用就介绍到这里。当然了, time 模块还有很多好玩的函数。因为不是很常用,而且限于篇幅,就不再赘述了。有关 time 模块的其他的资料,大家可以看 。

转载于:https://my.oschina.net/u/3729927/blog/1926901

你可能感兴趣的文章
部署exchange2010三合一:之五:功能测试
查看>>
nginx编译安装参数
查看>>
代码托管
查看>>
第一次给ThinkPHP5核心框架提pull request的完整过程
查看>>
U-Mail邮件系统何以誉为信息整合中转枢纽
查看>>
强大的vim配置文件,让编程更随意
查看>>
崛起于Springboot2.X之配置文件详解(10)
查看>>
定时执行程序-Quartz简单实例
查看>>
【CF 应用开发大赛】MyfCMS系统
查看>>
windows下kangle虚拟主机-架设java空间的教程及心得
查看>>
Discuz! X2.5:文件目录结构
查看>>
我的友情链接
查看>>
TCP/IP协议及首部初了解
查看>>
防火墙iptables
查看>>
CUDA搭建
查看>>
memcached与PostgreSQL缓存命中机制
查看>>
百度地图路线检索(3)
查看>>
linux netstat 命令详解
查看>>
对前几篇blog的环境等的补充说明
查看>>
Curl命令使用解析大全
查看>>