Python 学习之路(四)
以下所用的是Python 3.6
一、时间模块(time 模块)
实例环境为Ubuntu 14.04 python 3.6 导入time模块。注:可以在命令行输入: help(time.方法名字)查看帮助文档,例:help(time.localtime)
1.1 概述
- 在Python中,通常有这几种方式表示时间:a.时间戳 b.格式化的时间字符串 c.元组(struct_time 共九种元素)。由于Python的time模块主要是调用C库实现的,所以在不同的平台可能会有所不同。
- UTC(世界协调时),亦即格林威治天文时间,也是世界标准时间。在中国为UTC+8。DST夏令时。
- 时间戳(timestamp)的方式:时间戳表示是从1970年1月1号 00:00:00开始到现在按秒计算的偏移量。查看一下type(time.time())的返回值类型,可以看出是float类型。返回时间戳的函数主要有time()、clock()等。
- 元组方式:struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。
1.2 time.time()方法
使用time模块需要先导入time模块
获取当前时间戳
>>> import time
>>>
>>> time.time()
1519398250.5167336
1.3 time.localtime([secs])方法
将一个时间戳转换为当前时区的struct_time, 如果secs参数未提供,则以当前时间为准(默认调用time.time())
>>> time.localtime()
time.struct_time(tm_year=2018, tm_mon=2, tm_mday=23, tm_hour=23, tm_min=14, tm_sec=4, tm_wday=4, tm_yday=54, tm_isdst=0)
元组键值含义:
tm_year :年
tm_mon :月(1-12)
tm_mday :日(1-31)
tm_hour :时(0-23) tm_min :分(0-59) tm_sec :秒(0-59) tm_wday :星期几(0-6,0表示周日) tm_yday :一年中的第几天(1-366) tm_isdst :是否是夏令时(默认为-1)
1.4 time.sleep(secs)方法
线程睡眠指定时间,单位为秒
>>> time.sleep(2) #睡眠2S
1.5 time.gmtime([secs])方法
将一个时间戳转换为UTC时区的struct_time,不加参数则传入当前时间
>>> time.gmtime()
time.struct_time(tm_year=2018, tm_mon=2, tm_mday=23, tm_hour=15, tm_min=12, tm_sec=13, tm_wday=4, tm_yday=54, tm_isdst=0)
1.6 time.asctime([secs])方法
把一个表示时间的元组或者struct_time表示为 'Sat Feb 24 18:05:31 2018' 这种形式。如果没有给参数,会将time.localtime()作为参数传入。
>>> time.asctime()
'Sat Feb 24 18:05:31 2018'
1.7 time.ctime([secs])
把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果没有指定参数,将会默认使用time.time()作为参数。它的作用相当于time.asctime(time.localtime(secs))
>>> time.ctime(1000)
'Thu Jan 1 08:16:40 1970'
1.8 time.mktime(t)
time.mktime() 函数执行与gmtime(), localtime()相反的操作,它接收struct_time对象作为参数,返回用秒数表示时间的浮点数。必须传入参数。
>>> time.mktime(time.localtime())
1519468401.0
1.9 time.strftime( format [, t] )
根据格式规范将时间元组转换为字符串。有关格式化代码,请参阅库参考手册。 当时间元组不存在,则使用localtime()返回的当前时间。其中format:格式化字符串; t :可选的参数是一个struct_time对象
%Y 以世纪作为十进制数。
%m 月作为十进制数[01,12]。
%d 一个月中的一天作为十进制数[01,31]。
%H 小时(24小时制)作为十进制数[00,23]。
%M 分钟作为十进制数[00,59]。
%S 秒作为十进制数[00,61]。
%z 与UTC的时区偏移量。
%a Locale的缩写星期几名称。
%A 区域设置的完整星期几名称。
%b 区域设置的缩写月份名称。
%B Locale的全月名称。
%c 区域设置的适当日期和时间表示。
%I 小时(12小时制)作为十进制数[01,12]。
%p Locale相当于AM或PM。
>>> test_time = time.localtime() #获取当前时间
>>> print(test_time)
time.struct_time(tm_year=2018, tm_mon=2, tm_mday=24, tm_hour=18, tm_min=41, tm_sec=58, tm_wday=5, tm_yday=55, tm_isdst=0)
>>> time.strftime("%Y年%m月%d %H:%M:%S",test_time) #格式化输出日期
'2018年02月24 18:41:58'
1.10 time.strptime(string[,format])
将格式字符串转化成struct_time. 该函数是time.strftime()函数的逆操作。time strptime() 函数根据指定的格式把一个时间字符串解析为时间元组。函数返回的是struct_time对象。 其中string:字符串;format:格式化字符串
>>> print(test_time)
2018-02-24 18:41:58
>>> time.strptime(test_time,"%Y-%m-%d %H:%M:%S")
time.struct_time(tm_year=2018, tm_mon=2, tm_mday=24, tm_hour=18, tm_min=41, tm_sec=58, tm_wday=5, tm_yday=55, tm_isdst=-1)
1.11 time.clock()
这个函数, 函数以浮点数计算的秒数返回当前的CPU时间。该函数有两个功能:
- 在第一次调用的时候,返回的是程序运行的实际时间;
- 第二次之后的调用,返回的是自第一次调用后,到这次调用的时间间隔在win32系统下,这个函数返回的是真实时间(wall time),而在Unix/Linux下返回的是CPU时间。
1.12 元组时间获取
通过元组的key获取
>>> import time
>>> x = time.localtime(100000)
>>> print(x.tm_year)
1970
二、随机数random模块
实例环境为Ubuntu 14.04 python 3.6,导入random模块。 Python中的random模块用于生成随机数。
2.1 random.random()
random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0
>>> random.random()
0.6782385026141206
2.2 random.uniform(a,b)
用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成的随机数n: a <= n <= b。如果 a <b, 则 b <= n <= a。
>>> random.uniform(10,20)
11.956772292516312
2.3 random.randint(a, b)
返回一个随机整数N,a <= N <= b。 randrange(a, b+1)的别名。
>>> random.randint(1,9)
8
2.4 random.randrange(start, stop[, step])
从range(start, stop, step)返回一个start到end范围内的随机整数,start,end,step都是整数,不包含end,可以指定step。
返回0~99的随机偶数
>>> random.randrange(0,100,2)
40
2.5 random.choice(sequence)
从序列中获取一个随机元素,sequence为有序类型
>>> random.choice(("book1","book2","book3"))
'book3'
2.6 random.shuffle(x[, random])
原地搅乱序列x。可选参数random是一个具有0个参数的函数,返回一个[0.0, 1.0)之间的随机浮点数;默认情况下为函数random()。
>>> list = ["Hello", "python", "world!"];
>>> random.shuffle(list)
>>> print ("随机排序后 : ", list)
随机排序后 : ['world!', 'python', 'Hello']
2.7 random.sample(sequence, k)
从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列。sequence:序列,k:获取的元素个数
>>> list = [x for x in range(1, 10)] #列表生成式
>>> get_list = random.sample(list,5) #获取liest样本中的5个元素
>>> print(list)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print(get_list)
[5, 2, 6, 4, 1]
2.8随机分布函数
random.triangular(low, high, mode) 返回随机浮点数 N 使得 low <= N <= high. 返回遵循在low和hagh之间的特定 模式. 低和高边界默认为零和一。模式参数默认为边界之间的中点,给出对称分布。
random.betavariate(alpha, beta) Beta分布。参数条件 alpha > 0 and beta > 0. 返回值的范围为0到1。
random.expovariate(lambd) 指数分布。lambd为1.0除以所需平均值。它应该是非零的。(该参数将被称为“lambda”,但这是Python中的保留字。)如果lambd为正,返回值的范围为0到正无穷大,如果lambd为负,则从负无穷大到0。
random.gammavariate(alpha, beta) 伽玛分布。参数条件 alpha > 0 and beta > 0.
random.gauss(mu, sigma) 高斯分布。mu是平均值,sigma是标准偏差。这稍微快于下面定义的normalvariate()函数。
random.lognormvariate(mu, sigma) 对数正态分布。如果采用此分布的自然对数,您将得到平均值mu和标准偏差sigma的正态分布。mu可以具有任何值,并且sigma必须大于零。
random.normalvariate(mu, sigma) 正态分布。mu是平均值,sigma是标准偏差。
random.vonmisesvariate(mu, kappa) mu是平均角度,以弧度表示,介于0和2 * pi之间,kappa是浓度参数,必须大于或等于零。 如果kappa等于零,则该分布在0到2 * pi的范围内降低到均匀的随机角度。
random.paretovariate(alpha) 帕累托分布。alpha是形状参数。
random.weibullvariate(alpha, beta) Weibull分布。alpha是缩放参数,beta是形状参数。