Python日记——将datetime变为可迭代对象的小技巧

本文介绍如何使用Python的datetime模块将计时器精度从秒级提升至微秒级。通过将datetime对象转化为可迭代的字符串列表,并利用内置的int()方法转换为整数,成功实现微秒级计时。

2017.12.17

在完成《零基础入门学习Python》一书中计时器作业时,题目要求将计时器精度提高到微秒级,而演示中调用的是time模块中的localtime()方法获取时间,而localtime的精度只能达到秒一级,所以,自然会想到调用datetime中的datetime类。

值得注意的是,我们要调用的是datetime模块下的datetime类,所以在导入时应该是

>>> from datetime import datetime

datetime.now()返回当前日期和时间,其类型是datetime

看到这里很自然的就会想,我只需要把原演示中的t.localtime()替换为t.now()不就解决了吗。事实上一开始我也是这么做的,但由于datetime并非可迭代对象,用Python的话来说就是“object is not iterable”(对象是不可迭代的)或者“object is not subscriptable”(对象不能拥有下标)

所以这里就要想办法把datetime.now()变成可迭代的。这里我是用的方法是先用strftime() 用来格式化datetime,也就是将其转化为字符串,然后再用split()字符串进行切片,这样datetime就变成了由年月日时分秒及微秒组成的List,再用内置的int()方法将字符串转换为整数,就可以代入进行迭代了

datetime可迭代化部分代码如下:

self.strend=self.end.strftime('%Y,%m,%d,%H,%M,%S,%f').split(",")
self.strbegin=self.begin.strftime('%Y,%m,%d,%H,%M,%S,%f').split(",")#这里用“,”将不同单位的时间分隔,便于之后将字符串分片

最终实现了将计时器精度精确到微秒的目的,附完整代码:

 1 from datetime import datetime as t
 2 class MyTimer:
 3 def __init__(self):
 4 self.prompt="未开始计时"
 5 self.unit=['',"","","","","","微秒"]
 6 self.lasted=[]
 7 self.begin=0
 8 self.end=0
 9 def __str__(self):
10 return self.prompt
11 __repr__=__str__
12 def start(self):
13 self.begin=t.now()
14 print("计时开始!")
15 def stop(self):
16 self.end=t.now()
17 print("计时结束!")
18 self.calc()
19 def calc(self):
20 self.lasted=[]
21 self.prompt="总共运行了"
22 self.strend=self.end.strftime('%Y,%m,%d,%H,%M,%S,%f').split(",")
23 self.strbegin=self.begin.strftime('%Y,%m,%d,%H,%M,%S,%f').split(",")
24 for i in range(7):
25 intspan=int(self.strend[i])-int(self.strbegin[i])
26 if i==6:
27 if intspan>=0:
28 self.lasted.append(intspan)
29 else:
30 self.lasted[5]-=1
31 self.lasted.append(intspan+1000000)
32 else:
33 if intspan>=0:
34 self.lasted.append(intspan)
35 else:
36 self.lasted[i-1]-=1
37 self.lasted.append(intspan+60)
38 if self.lasted[i]:
39 self.prompt+=(str(self.lasted[i])+self.unit[i])
40 print(self.prompt)
MyTimer

 

 

转载于:https://www.cnblogs.com/east1994/p/8052271.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值