Python 12 标准库-time和random模块

Python 12 标准库-time和random模块

旧博客Python系列

time模块

以下都直接说方法名.
时间模块要记住下边的图:
time.png
timestring.png

time模块内其实有三种时间:

1 时间戳(偏移量)
time()方法不能传参数,调用该方法返回一个时间戳,就是一个浮点数,表示从1970年1月1日0时到函数运行时间的秒数.1970年是<a href=""https://en.wikipedia.org/wiki/Unix"" rel=""noopener"" target=""_blank"">UNIX系统诞生.这是一个绝对时间,与时区,夏令时等都无关系,一般用来做运算,比如程序运行的时间等.

import time
start = time.time()
...
end = time.time()
elapsed_time = end - start

时间戳转换成结构化时间,用localtime和gmtime方法.

2 结构化时间
localtime(int)得到一个namedtuple对象(本质是一个元组),可以调用里边的属性名得到时间的某个内容比如年,月,日等.其中tm_wday表示周一到周六,索引从0开始.tm_yday表示是一年的第几天.如果不传参数,就是用当前时间戳生成结构化时间,如果传参数表示从时间戳0开始偏移的秒数.注意本地时间一般是根据时区调整过的.

import time
b = time.localtime()
print(b.tm_wday,b.tm_yday)

gmtime(int),如果不传参数,得到utc +0 时间对应的结构化时间.如果传参数,则表示从时间戳0开始偏移的秒数.这个时间就和时间戳本质是一样的,不包含时区的概念.

结构化时间转换为时间戳,用mktime(struct_time)方法
结构化时间转换为字符串时间,用strftime(""%Y-%m-%d %X"",struct_time)方法

import time

time_stamp = 1459003290
b = time.localtime(time_stamp)
c = time.gmtime(time_stamp)
print(""local time is: "", b)
print(""GMT time is: "", c)
print('----------------------------------')
d = time.strftime(""%Y~%m~%d %X"", b)
e = time.strftime(""%Y %m %d %X"", c)
print(""stamp from localtime is: "", d)
print(""stamp from GMT time is: "", e)
print('----------------------------------')

3 字符串时间
ctime(secs)获得一个简单的字符串描述,后边可以不传参数按照当前时间,也可以传入秒数.
asctime(p_tuple)也是获得字符串描述,后边可以不传参数,默认是time.localtime(),也可以传入参数,但参数必须是一个结构化时间对象.
这两种方法都不支持自定义格式显示,如果要自定义,则需要通过strftime(format,struct_time)从结构化时间生成一个字符串时间.这个返回对象的类型确实是一个字符串.

从字符串时间转换为结构化时间,用strptime(format,string_time)方法,通配符与strf一样,这两个函数其实是做相反的工作.

import time

a = time.localtime(1527172423)
print(""ctime is: "", a)
b = time.strftime(""%d-%m-%Y %X"", a)
print(""from struct get string is: "", b)
c = time.strptime(b, ""%d-%m-%Y %H:%M:%S"")
print('from string to struct_time is: ', c)

字符串时间和时间戳是不能互相转换的(为什么?因为纯粹的字符串不知道时区和其他辅助信息,无法转换成时间戳).但是生成的或者是由时间戳转换而成的结构化时间,是包含这些内容的,因此可以转换成时间戳.示例代码中同一个时间戳,用localtime和gmtime转换成结构化时间再转换回来,结果是不同的,所以一般情况最好使用localtime来获取时间.

datetime模块

相比time模块,datetime模块更接近普通人的使用方式,而time模块比较偏内部运算使用.
一般只要知道 datetime.datetime.now() datetime.datetime.today()就可以了.

random模块

random模块是python中的随机数方法,采用梅森旋转算法生成伪随机数为什么计算机无法生成真正的随机数?.知道了随机数的发生原理之后,就理解了rand设置种子的方法.默认情况下种子是当前的系统时间.
随机数在编程中使用很广,包括测试程序,验证码程序,统计学计算等.
random模块的主要方法:

random() 产生一个在0-1之间的随机数
randint(a,b) 产生a-b之间的随机整数,包含a和b
randrange(a,b) 产生a-b之间的随机整数,包含a,不包含b
choice(iterable) 随机选取1个可迭代对象里的元素
sample(iterable,num) 随机选取num个元素,num必须给出,不得超过元素个数.返回这些元素构成的列表
unform(a,b) 取a-b之间的浮点型随机值
shuffle(item) 打乱后边序列里的顺序,就地打乱,返回None
seed(num) 改变随机数种子
LICENSED UNDER CC BY-NC-SA 4.0
Comment