有趣的Python笔记Ⅰ_Time
有趣的Python笔记
[TOC]
图片来自https://www.cnblogs.com/codefish/p/5032753.html‘[python基础]关于包,类,模块的那些事儿’
类(class)使一段代码更容易多次使用;完成某一操作所使用的多个类成为模块(model);完成某一类操作所使用的模块集合为包(package),各个模块(*.py)加上“__init__.py”得以成为包。
Time
1 | import time |
无非三种格式:
时间戳(timestamp)、格式化时间(format_time)、固定格式时间(struct_time)
图片来自https://www.cnblogs.com/tkqasn/p/6001134.html ‘python time模块和datetime模块详解’
P.S. Unix时间戳(Unix epoch, Unix time, POSIX time 或 Unix timestamp)为从格林尼治时间1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
1、Y2038问题:时间戳数值溢出,大多数UNIX系统中UNIX时间戳为32位,进位后符号位置1,其余31位为0。“时间回归”为1901年12月13日20时45分52秒,系统错误。
2、64位iOS系统负时间值问题:时区转换(减去数个小时)造成时间小于1970年1月1日(UTC/GMT的午夜),时间错误,无法启动。
符号 | 意义 |
---|---|
%Y | 年份表示(000-9999) |
%y | 年份表示(00-99) |
%m | 月份(01-12) |
%d | 日期(0-31) |
%I | 12小时制小时数(01-12) |
%H | 24小时制小时数(0-23) |
%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 | 当前时区的名称 |
Datetime
datatime模块重新封装time模块,提供的类有:date, time, datetime, timedelta, tzinfo。
datetime.datetime.now():model --> class --> method
1 | import datetime |
1 | # 创建名为dates的date对象 dates = date.today() |
1 | # 参数(元组)形式(time.localtime()) dates.timetuple() |
附:粗略计算程序运行时间
基本代码逻辑
1
2
3
4
5
6
7
8
9#!usr/bin/env python3
#-*- coding: utf-8 -*-
__author__ = 'QCF'
import time
t1 = time.time()
................
t2 = time.time()
print("程序运行时间约为:{:.2f}ms".format((t2 - t1) * 1000))自定义运行次数,计算平均时间,输出到文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78#!/usr/bin/env python3
#-*- encoding: utf-8 -*-
__author__ = 'QCF'
import time
# 计入程序运行次数
temp = input("Please input runing times:")
# 判断输入数据是否为整数
if (isinstance(eval(temp), int) == False):
print("Error! 程序运行次数应为整数!\n请重新运行程序!")
exit()
else:
pass
temp = int(temp)
TimeList = []
for i in range(temp):
t1 = 0
t2 = 0
t1 = time.time()
# =============需要运行的程序=============
import time
a = time.time()
b = time.time()
print((b-a)*1000)
# print("程序运行时间约为:{:.6f}ms".format((b - a) * 1000))
# =============需要运行的程序=============
t2 = time.time()
DeltaTime = (t2 - t1) * 1000
TimeList.append(DeltaTime)
# 生成时间列表
Sum = 0
for time in TimeList:
Sum += time
# 打印目标程序
print('=' * 40)
print('目标程序为:')
print("\nimport time\n"
"a = time.time()\n"
"b = time.time()\n"
"print((b-a)*1000\n)")
print('目标程序结束')
print('=' * 40)
# 打印平均时间数据
print("各次运行时间为:{:}ms".format(TimeList))
print("目标程序运行的次数为:{}".format(temp))
print("目标程序运行的平均时间为:{}ms".format(Sum / temp))
# 分行输入文件
f = open("AverageRuningTime.txt", "w", encoding = 'utf-8')
# ===============输入目标程序==============
f.write("目标程序为:\n\n")
f.write("import time\na = time.time()\nb = time.time()\nprint((b-a)*1000)\n\n")
# ===============输入目标程序==============
# 输入时间列表到文件
f.write("各次运行时间为(ms):\n")
for i in TimeList:
f.write(str(i))
f.write('\n')
# 输入平均时间数据到文件
f.write('\n\n')
f.write("目标程序运行的次数为:")
f.write(str(temp))
f.write('\n\n')
f.write("目标程序运行的平均时间为(ms):")
f.write(str(Sum / temp))
f.close()
Timeit :准确测量代码的执行时间
pprint模块
iPython:
- 以
%
开头的叫做line magic
, 这种类型的指令只能作用于一行代码,默认是可以不带百分号使用。 - 以
%%
开头的叫做cell magic
, 这种类型的指令只能作用于代码块。