python自己做个定时器_技术图文:如何利用 Python 做一个简单的定时器类?

原标题:技术图文:如何利用 Python 做一个简单的定时器类?

背景

今天在B站上看有关 Python 最火的一个教学视频 -- “零基础入门学习 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纪元后经过的浮点秒数)。

importtime

ticks = time.time

print( '当前时间戳为:', ticks) # 当前时间戳为: 1570793479.162907

获取当前时间元组

time.localtime([sec])格式化时间戳为本地的时间。如果sec参数未输入,则以当前时间为转换标准。

importtime

localtime = 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])接受时间元组并返回一个可读的形式。

importtime

t = 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纪元后经过的浮点秒数)。

importtime

print(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指秒数。

代码实现

importtime

classMytime(object):

def__init__(self):

self.__info = '未开始计时!'

self.__begin = None

self.__end = None

self.__jg = 0

def__str__(self):

returnself.__info

def__repr__(self):

returnself.__info

defstart(self):

print( '计时开始...')

self.__begin = time.localtime

defstop(self):

ifnotself.__begin:

print( '提示:请先调用start开始计时!')

return

self.__end = time.localtime

self.__jg = time.mktime(self.__end) - time.mktime(self.__begin)

self.__info = '共运行了%d秒'% self.__jg

print( '计时结束!')

returnself.__jg

def__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

相关图文:

经过8年多的发展,LSGO软件技术团队在「地理信息系统」、「数据统计分析」、「计算机视觉」等领域积累了丰富的研发经验,也建立了人才培养的完备体系,目前深耕的领域为「机器学习与量化金融」,欢迎对计算机技术感兴趣的同学加入,与我们共同成长进步。

后台回复「搜搜搜」,随机获取电子资源!返回搜狐,查看更多

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

成为Java流大师–第6部分:使用流创建新的数据库应用程序

您是否曾经想开发数据库应用程序的“快速”版本? 在此动手实验文章中,您将学习一种真正简单而直接的方法。 整个Java域模型将自动为您生成。 您只需连接到现有数据库,然后开始使用Java流进行开发。 例如,您将能够在几分钟内为您现…

快速排序 挖坑_由浅入深玩转快速排序算法

由浅入深玩转快速排序算法快速排序可以说是最快的通用排序算法,它甚至被誉为20世纪科学和工程领域的十大算法之一。在众多排序算法中其无论是时间复杂度还是空间复杂度都颇具优势。作为开发工程师,我们很有必要了解它的思想。接下来将由在下为大家一步步…

代码拾取图片某一点的颜色_RPG游戏开发日志7:道具拾取与存放

本项目同步上传于github和coding上,国内读者可以通过在coding下载项目。也欢迎你加入我的UE4学习交流QQ群:872537977。如果你喜欢我写的文章,也希望你点赞、收藏、转发。谢谢!如果你喜欢我写的文章,也希望你点赞、收藏…

使用sstableloader恢复Cassandra Priam备份

之前,我曾写过关于设置Cassandra和Priam进行备份和集群管理的文章。 但是,我在此处提供的用于备份还原的示例并不适用于所有情况,例如,它可能不适用于完全独立的群集。 或者在部分还原到一个表而不是整个数据库的情况下。 在这种…

abp vue如何配置服务地址_DHCP服务如何配置才能尽量减少被攻击的可能

DHCP Snooping是啥?DHCP Snooping是DHCP的一种安全特性,用来保证DHCP客户端能够正确的从DHCP服务器获取IP地址,防止网络中针对DHCP的攻击。DHCP Snooping是如何防止DHCP攻击的呢?DHCP,动态主机配置协议,在I…

通达信缠论买卖点公式_通达信缠论多空主图指标公式

1.高位无量就拿,就算拿错了也要拿着。高位就是说股价处于或者接近历史的最高位。高位无量横盘,是非常典型的上涨中继形态之一,高位的窄幅箱型振荡。2.高位放量出现就要跑,哪怕是跑错也要跑。股价在已经过了一段时间比较大的涨幅后&#xff0c…

python服务器搭建 实战_实战讲解:如何用Python搭建一个服务器

有人说表示只学Python没有用,必须学会一个框架(比如Django和web.py)才能找到工作。其实掌握一个类似于框架的高级工具是有用的,但是基础的东西可以让你永远不被淘汰,不要被工具限制了自己的发展。今天不使用框架,也不使用Python标…

多节锂电串联保护板ic_如何有效保护锂电池板,一款优质的MOS管就能解决

锂电池几乎应用于我们日常接触到的各类电器之中,但如何保护锂电池,你又是否知道呢?其实在锂电池保护板,最主要的元器件是IC与MOS。MOS对锂电池板的保护作用非常大,它可以检测过充电,检测过放电,…

使用Java 8 Lambda表达式将实体映射到DTO

当我们需要将DTO转换为实体(Hibernate实体等)并向后转换时,我们都会面临混乱的开销代码。 在我的示例中,我将用Java 8演示代码如何变得越来越短。 让我们创建目标DTO: public class ActiveUserListDTO {public Acti…

使用pp架构形成计算机集群请求的地址无效_干货!史上最详细脑图《大型网站技术架构》...

1. 介绍一下《大型网站技术架构》这本书可能很多人都看过,小编个人觉得真的是非常不错的一本书。看完这本书后,你会对如何设计大型网站架构,有非常清晰的思路。如果还没有读过的小伙伴,赶紧去读一读吧。PS:小编这里有这…

linux 启动rsyslog服务_linux rsyslog服务部署

软件安装在centos7,rsyslog默认安装,重点在于配置文件。[rootlocalhost samba]# vim /etc/rsyslog.conf$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)$ModLoad imjournal # provides access to the systemd…

泰坦尼克号数据_数据分析-泰坦尼克号乘客生存率预测

项目背景目标预测一个乘客是否能够在泰坦尼克号事件中幸存。概述1912年4月15日,泰坦尼克号在首次航行期间撞上冰山后沉没,船上共有2224名人员(包括乘客和机组人员),共有1502人不幸遇难。造成海难失事的原因之一是乘客和…

linux mysql服务器安装_Linux服务器MySQL安装

Linux服务器MySQL安装1. MySQL官网下载如图:2. 安装MySQL[rootiZ2zebb0428roermd00462Z /]# rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch#过滤MySQL:[rootiZ2zebb0428roermd00462Z /]#yum repolist all |grep mysql#ena…

客户端渲染换为服务器端渲染_服务器与客户端渲染(AngularJS与服务器端MVC)

客户端渲染换为服务器端渲染关于服务器与客户端应用程序渲染的讨论很多。 虽然没有“一刀切”的解决方案,但我将尝试从不同的角度主张客户端(特别是AngularJS)。 首先是建筑。 建筑 做得好的架构已经明确定义了关注点分离(SoS&am…

python3 array为什么不能放不同类型的数据_来自俄罗斯的凶猛彪悍的分析数据库ClickHouse...

点击上方蓝色字体,选择“设为星标”回复”资源“获取更多资源大数据技术与架构点击右侧关注,大数据开发领域最强公众号!暴走大数据点击右侧关注,暴走大数据!ClickHouse相关文章推荐:战斗民族开源 | ClickHo…

php mysql 实现原理_PHP底层和mysql的通信原理

要清楚的几个概念:FPM进程:进程数在php-fpm.ini中设置。没有设置 max_requests ,那么进程是不会销毁的,也就是说当一个进程里面出现死循环或者内存溢出等导致进程僵死的情况出现的时候,处理的进程就会少一个。mysql连接…

通过READ-BEHIND CACHE来控制缓慢的生产者

在我们的互联世界中,我们经常使用我们不拥有或无权改善的API中的数据。 如果一切顺利,他们的表现就会很好,每个人都会感到高兴。 但是太多次,我们不得不使用延迟小于最佳延迟的 API。 当然,答案是缓存该数据 。 但是&…

mysql用户名锁定_MySQL用户锁定

修改方式:set global log_warnings2;MySQL 5.5版本官方文档中,并没有用户锁的状态。因此不存在用户会被锁。。The account-locking capability depends on the presence of the account_locked column in themysql.user table. For upgrades to MySQL 5.…

python package和目录_PyCharm中Directory与Python package的区别

对于Python而言,有一点是要认识明确的,python作为一个相对而言轻量级的,易用的脚本语言(当然其功能并不仅限于此,在此只是讨论该特点),随着程序的增长,可能想要把它分成几个文件,以便逻辑更加清…

mysql过滤器_MYSQL复制过滤器

vim /etc/my.cnf.d/mariadb-server.cnf[mysqld]binlog-do-dbdb1 #白名单模式,仅允许主服务器上生成db1的二进制日志,此选项不支持一行指定多个参数,需要每个参数写一行binlog-do-dbdb2重启服务systemctl restart mariadb.service主服务器…