技术图文:如何利用 Python 做一个简单的定时器类?
背景
今天在B站上看有关 Python 最火的一个教学视频,零基础入门学习 Python,这也是我们 Python基础刻意练习活动 的推荐视频教程。
在学习魔法方法的时候,有一节视频是制作一个简单的定时器,基本要求如下:
- 定制一个计时器的类。
start
和stop
方法代表启动计时和停止计时。- 假设计时器对象
t1
,print(t1)
和直接调用t1
均显示结果。 - 当计时器未启动或已经停止计时时,调用
stop
方法会给予温馨的提示。 - 两个计时器对象可以进行相加:
t1+t2
。 - 只能使用提供的有限资源完成。
技术分析
Python 的time
模块中,时间表现的格式主要有三种:
timestamp
时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。struct_time
时间元组,共有九个元素组。format time
格式化时间,用格式化的结构使时间更具可读性。包括自定义格式和固定格式。
获取时间戳
time.time()
返回当前时间的时间戳(1970纪元后经过的浮点秒数)。
import timeticks = time.time()
print('当前时间戳为:', ticks) # 当前时间戳为: 1570793479.162907
获取当前时间元组
time.localtime([sec])
格式化时间戳为本地的时间。 如果sec
参数未输入,则以当前时间为转换标准。
import timelocaltime = time.localtime(time.time())
print("本地时间为 :", localtime)
# 本地时间为 : time.struct_time(tm_year=2019, tm_mon=10, tm_mday=11, tm_hour=19, tm_min=35, tm_sec=31, tm_wday=4, tm_yday=284, tm_isdst=0)
tm_year
:4位数年tm_mon
:月tm_mday
:日tm_hour
:小时tm_min
:分钟tm_sec
:秒tm_wday
:一周的第几日,0到6 (0是周一)tm_yday
:一年的第几日tm_isdst
:夏令时,值有:1(夏令时)、0(不是夏令时)、-1(未知),默认 -1
获取格式化的时间
time.asctime([tupletime])
接受时间元组并返回一个可读的形式。
import timet = time.localtime()
print("本地时间为 : %s " % time.asctime(t))
# 本地时间为 : Fri Oct 11 19:42:34 2019
格式化时间
time.strftime(format[,tupletime])
接收以时间元组,并返回以可读字符串表示的当地时间,格式由format决定。time.strptime(str,format='%a %b %d %H:%M:%S %Y')
根据format的格式把一个时间字符串解析为时间元组。time.mktime(tupletime)
接受时间元组并返回时间戳(1970纪元后经过的浮点秒数)。
import timeprint(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
# 2019-10-11 19:48:31
print(time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()))
# Fri Oct 11 19:48:31 2019
a = "Fri Oct 11 19:48:31 2019"
print(time.mktime(time.strptime(a, "%a %b %d %H:%M:%S %Y")))
# 1570794511.0
%y
两位数的年份表示(00-99)%Y
四位数的年份表示(000-9999)%m
月份(01-12)%d
月内中的一天(0-31)%H
24小时制小时数(0-23)%I
12小时制小时数(01-12)%M
分钟数(00=59)%S
秒(00-59)%a
本地简化星期名称%A
本地完整星期名称%b
本地简化的月份名称%B
本地完整的月份名称%c
本地相应的日期表示和时间表示%j
年内的一天(001-366)%p
本地A.M.或P.M.的等价符%U
一年中的星期数(00-53)星期天为星期的开始%w
星期(0-6),星期天为星期的开始%W
一年中的星期数(00-53)星期一为星期的开始%x
本地相应的日期表示%X
本地相应的时间表示%Z
当前时区的名称%%
%号本身
Time 模块
time.gmtime([secs])
接收时间戳(1970纪元后经过的浮点秒数)并返回格林威治天文时间下的时间元组。time.ctime([secs])
把一个时间戳(按秒计算的浮点数)转化为time.asctime()
的形式,作用相当于asctime(localtime(secs))
,未给参数相当于asctime()
。time.sleep(secs)
推迟调用线程的运行,secs指秒数。
代码实现
import timeclass Mytime(object):def __init__(self):self.__info = '未开始计时!'self.__begin = Noneself.__end = Noneself.__jg = 0def __str__(self):return self.__infodef __repr__(self):return self.__infodef start(self):print('计时开始...')self.__begin = time.localtime()def stop(self):if not self.__begin:print('提示:请先调用start()开始计时!')returnself.__end = time.localtime()self.__jg = time.mktime(self.__end) - time.mktime(self.__begin)self.__info = '共运行了%d秒' % self.__jgprint('计时结束!')return self.__jgdef __add__(self, other):return '共运行了%d秒' % (other.__jg + self.__jg)t1 = Mytime()
print(t1)
# 未开始计时!
t1.stop()
# 提示:请先调用start()开始计时!
t1.start()
# 计时开始...
time.sleep(5)
t1.stop()
# 计时结束!
print(t1)
# 共运行了5秒
t2 = Mytime()
t2.start()
# 计时开始...
time.sleep(7)
t2.stop()
# 计时结束!
print(t2)
# 共运行了7秒
print(t1 + t2)
# 共运行了12秒
总结
这个题目让我们熟悉了 Python 中time
模块的使用方法,以及类的定义和类中的一系列魔法方法,如__init__
、__str__
、__repr__
、__add__
等等,Python 的魔法方法很是神奇啊,把面向对象中的构造函数、析构函数、运算符的重载等全部包含了进去。需要好好体会才能把这块的知识学好。今天就这样吧!See You!
参考文献
- https://www.bilibili.com/video/av4050443
- https://www.cnblogs.com/lichunl/p/9098024.html
相关图文:
- 资料分享:数学建模资料分享 – 图论部分
- 资料分享:数学建模资料分享 – 神经网络部分
- 如何利用 C# 实现 K 最邻近算法?
- 如何利用 C# 实现 K-D Tree 结构?
- 如何利用 C# + KDTree 实现 K 最邻近算法?
- 如何利用 C# 对神经网络模型进行抽象?
- 如何利用 C# 实现神经网络的感知器模型?
- 如何利用 C# 实现 Delta 学习规则?
- 如何利用 C# 实现 误差反向传播 学习规则?
- 如何利用 C# 爬取带 Token 验证的网站数据?
- 如何利用 C# 向 Access 数据库插入大量数据?
- 如何利用 C# + Python 破解猫眼电影的反爬虫机制?
相关文章:

20、C#里面方法的创建和显示
在C#里面,和Java也是一样的,都是可以创建方法的。这里所说的方法,就是其它编程语言里面的函数、子程序、过程等。创建的方法有两种:一种是没有返回值的方法。一种是有返回值的方法。无论是哪种方法,其实都是很简单的。…

优秀的Java程序员应具备哪些编程技术?
想要成为一名合格的java程序猿,需要学习的知识是有很多的,但是基础知识一定要非常牢固,基础不牢固的程序员,随时都会被新的知识和技术所淘汰,下盘不稳风一吹就倒,那么具体作为一个优秀的Java程序员应具备哪…

asp.net 后台事件掉用前台js
在下面的例子中,我们在一个 .aspx 文件中声明了一个 TextBox 控件和一个 Label 控件。当您更改了 TextBox 中的值,并且在 TextBox 外单击时,change 子例程就会被执行。change 子例程会向 Label 控件写一条文本: <script runat&…

Android -- 利用Broadcast开启Service
Broadcast和Service都是Android四大组建之一的。 这里的广播是动态的,自己注册的一个广播。 这种最典型的用法就是利用开机广播,然后再起自己的服务,也就是在Android手机中做到开启启动。 Service与Broadcast …

资料分享:推荐一本《李宏毅机器学习》开源电子书!
背景 今天在 github 上看到了 datawhale 发布的 李宏毅机器学习笔记。 https://datawhalechina.github.io/leeml-notes 其目录如下: P1 机器学习介绍P2 为什么要学习机器学习P3 回归P4 回归-演示P5 误差从哪来?P6 梯度下降P7 梯度下降(用…

Python 中常见的配置文件写法
相信学习Python或者正在进行Python工作的小伙伴都会有一个疑问,为什么要写配置文件呢?在开发过程中,我们常常会用到一些固定参数或者是常量。对于这些较为固定且常用到的部分,往往会将其写到一个固定文件中,避免在不同的模块代码…

技术图文:Python描述符 (descriptor) 详解
背景 今天在B站上学习“零基础入门学习Python”这门课程的第46讲“魔法方法:描述符”,这也是我们组织的 Python基础刻意练习活动 的学习任务,其中有这样的一个题目。 练习要求: 先定义一个温度类,然后定义两个描述符…

[转]自定义hadoop map/reduce输入文件切割InputFormat
本文转载自:http://hi.baidu.com/lzpsky/blog/item/99d58738b08a68e7b311c70d.html hadoop会对原始输入文件进行文件切割,然后把每个split传入mapper程序中进行处理,FileInputFormat是所有以文件作 为数据源的InputFormat实现的基类&…

使用深度学习检测DGA(域名生成算法)——LSTM的输入数据本质上还是词袋模型...
from:http://www.freebuf.com/articles/network/139697.html DGA(域名生成算法)是一种利用随机字符来生成C&C域名,从而逃避域名黑名单检测的技术手段。例如,一个由Cryptolocker创建的DGA生成域xeogrhxquuubt.com,如…

学习Python开发培训有用吗
学习Python开发培训有用吗?这是目前很多人都比较关注的一个问题,Python语言在最近几年是广受IT互联网行业关注的, 下面我们就针对这问题来详细的分析一下。 学习Python开发培训有用吗?Python是被广泛使用的高级编程语言,Python解释器本身几…

Web性能优化实践——应用层性能优化
随着公司项目的进一步推广,用户数量的增加,已经面临着单台服务器不能负载的问题。 这次的优化由于时间关系主要分两步走,首先优化应用层代码以提高单台服务器的负载和吞吐率。之后再进行分表,引入队列、MemCached等分布式应用。 项…

技术图文:Python魔法方法之属性访问详解
背景 今天在B站学习“零基础入门学习 Python”中的第45节“魔法方法:属性访问”,这也是我们组织的 Python基础刻意练习活动 的学习任务,其中有这样的一个题目。 练习要求: 写一个矩形类,默认有宽和高两个属性。如果…

chmod权限设置
drwxr-xr-x. 7 root root 4096 Sep 26 20:16 sysconfig-rw-r--r--. 1 root root 1150 Aug 31 18:46 sysctl.conflrwxrwxrwx. 1 root root 14 Aug 31 17:21 system-release -> centos-release例如:-rw-r--r--第一个代表文件类型:-普通文件:…

【Python培训基础】一篇文件教你py文件打包成exe
场景: 如果要将我们编写好的代码给别人使用,如果要他们直接使用我们的代码,就需要安装各种编译软件以及第三方模块,还要对软件操作,编程有一定的了解,这对使用者的要求比较高,不是很方便,为了解决这一问题,我们可以选择将我们编写的代码,编译成一个可执行文件,这样,就可以实现跨…

刻意练习:Python基础 -- Task06. 字典与集合
背景 我们准备利用17天时间,将 “Python基础的刻意练习” 分为如下任务: Task01:变量、运算符与数据类型(1day)Task02:条件与循环(1day)Task03:列表与元组(…

WCF - Session 剖析
WCF中的Session WCF是MS基于SOA建立的一套在分布式环境中各个相对独立系统进行通信的构架,实现了最新的基于WS-*规范。按照SOA的原则,相对独自的业务逻辑以service的形式封装,调用者通过Messaging的方式调用Service。对于承载着某个业务功能的…

mui 微信支付 与springMVC服务器交互
昨天搞定了微信支付,没有想象中的难,主要是官方的demo不全好多东西要自己琢磨,mui端的就不写了支付宝的有了一模一样.上java端的首先是jar包 一个是用来解析xml文件 一个是用来解析json 当然可以替代 然后是工具类当然并不是全都用的到. public class ConfigUtil { /** * 服务…

Python零基础自学会有哪些弊端
Python在人工智能领域的发展前景非常好,很多人都想要学习Python技术,有一些小伙伴会选择通过自学来学习,但是如果是零基础,自学的话一定要注意这些弊端,下面就为大家详细的介绍一下Python零基础自学会有哪些弊端? Pyt…

技术图文:如何利用 Turtle 绘制一棵漂亮的樱花树
背景 最近看到很多机构在推动“青少年编程能力等级标准”的制定以及相关考试的测评,看样子今年年底这个事情就能够确定,明天上半年在一些大中城市就会全面铺开。 《青少年编程能力等级》标准发布,年底前将在部分地区落地青少年编程能力等级…

Python 是否是下一个 PHP?为什么?
前几天和一个看好 Python 的 Rails 开发者聊天,他看好 Python 的原因就是 PHP 统治今天的网络应用开发。而 Python 很像下一个 PHP 。 『下一个 PHP』如何定义?是指流行程度么?如果是的话,我觉得 Python 不会像 PHP 那样流行。根本…

正确使用STL-MAP中Erase函数
一切尽在代码中。 #include <iostream> #include <map> #include <string> using namespace std ;int main(void) { map<int, string> m ;m.insert(pair<int, string>(1, "abc")) ;m.insert(pair<int, string>(2, "def&qu…

学完UI设计可以从事哪些工作
最近有很多同学都会问到一个问题,就是学完UI设计可以从事哪些工作?对于正在学习UI设计的同学和已经学完UI设计的同学们,可以来看看下面文章的详细介绍就知道了。 学完UI设计可以从事哪些工作? 一、交互设计师。 学习UI设计之后就可以做交互设计师了&am…

刻意练习:Python基础 -- Task08. 异常处理
背景 我们准备利用17天时间,将 “Python基础的刻意练习” 分为如下任务: Task01:变量、运算符与数据类型(1day)Task02:条件与循环(1day)Task03:列表与元组(…

Winform 控件自适应 JSP 入门登录案例
明儿在放,先睡转载于:https://www.cnblogs.com/javabin/archive/2011/09/26/2192402.html

MyEclipse对Struts2配置文件较检异常 Invalid result location value/parameter
有时在编写struts.xml时会报错,但是找不出有什么她方有问题。也能正常运行 MyEclipse有地方去struts的xml进行了验证,经查找把这里 的build去掉就可以了 本文转自lpxxn博客园博客,原文链接:http://www.cnblogs.com/li-peng/p/3791…

学Python有哪些优势
Python在人工智能领域应用是比较广泛的,近几年,越来越多的人对Python技术比较感兴趣,想要学习,那么具体学Python有哪些优势呢?我们来看看下面的详细介绍就知道了。 学Python有哪些优势? 1.Python很受欢迎 流行程度似乎不是衡量价…

MongoDB 正则表达式
阅读目录 示例不区分大小写数组使用正则表达式正则中包含变量回到顶部示例 MongoDB 使用 $regex 操作符来设置匹配字符串的正则表达式。 > db.col.find() { "_id" : ObjectId("56c6bbef64799370c0ef358a"), "x" : "hello world", &…

刻意练习:Python基础 -- Task09. else 与 with 语句
背景 我们准备利用17天时间,将 “Python基础的刻意练习” 分为如下任务: Task01:变量、运算符与数据类型(1day)Task02:条件与循环(1day)Task03:列表与元组(…

Java学习必不可少的网站,快收藏起来
java技术在IT互联网行业的发展前景一直在提升,越来越多的人都在学习java技术,今天小编来给大家提供一些学习Java的网站集合,希望能够帮助到正在学习java技术的同学。 Java学习必不可少的网站,快收藏起来! 1. Stackoverflow Stacko…

刻意练习:Python基础 -- Task11. 魔法方法
背景 我们准备利用17天时间,将 “Python基础的刻意练习” 分为如下任务: Task01:变量、运算符与数据类型(1day)Task02:条件与循环(1day)Task03:列表与元组(…