22. 常用内置模块

22.1 random模块

随机数据可以用于数学、测试、安全、算法等领域中。内置random模块,可用于生成伪随机数。

真正意义上的随机数或随机事件是在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,不可见的。而计算机中的随机函数是按一定的算法模拟产生,对于正常随机而言,会出现某个事件出现多次的情况。而伪随机,是在事件触发前设定好,各个事件各发生一次,仅顺序不同而已。

在使用random模块前,需要导入其模块,用法如下所示:

import random

22.1.1 random

random() - 用于生成0~1的随机符点数,若用n表示随机生成的数,则0<=n<1.0

示例用法如下所示:

>>> import random

>>> random.random()

0.8907589330748479

>>> [round(random.random(),2) for i in range(10)]

[0.83, 0.83, 0.73, 0.53, 0.67, 0.39, 0.23, 0.57, 0.4, 0.39]

22.1.2 randint

randint(start,end):用于生成指定范围内的整数,start为起始数字范围,end为结束数字范围,若用n表示随机生成的数,则start<=n<=end

示例用法如下所示:

>>> random.randint(1,20)

16

>>> [random.randint(1,20) for i in range(10)]

[15, 3, 13, 17, 12, 5, 14, 9, 15, 17]

22.1.3 randrange

randrange([start],stop,[step]):按指定步长生成随机数,与range类似,若start未指定,默认人0开始,step可为正,也可以为负

示例用法如下所示:

>>> [random.randrange(20) for i in range(20)]

[1, 9, 4, 11, 8, 10, 12, 6, 3, 16, 4, 10, 16, 19, 13, 0, 18, 2, 8, 1]

>>> [random.randrange(30,20,-2) for i in range(20)]

[28, 30, 28, 28, 30, 28, 28, 26, 26, 26, 30, 28, 22, 28, 28, 24, 30, 30, 28, 22]

>>> [random.randrange(20,30,2) for i in range(20)]

[24, 20, 26, 28, 22, 22, 26, 22, 20, 28, 20, 24, 22, 28, 28, 28, 22, 22, 20, 26]

22.1.4 choice&choices

choice(seq):从非空序列seq中随机选择一个元素,seq需要可为字符串、列表和元组

choices(population, weights=None, *, cum_weights=None, k=1):从population中进行k次随机选择,每次选取一个元素(可能会出现同一个元素被多次选中的情况)

weights:相对权重值,population中有几个元素就要有相对应的权重值,

cum_weights:累计权重值,如相对权重值为[1,2,3,5],则累计权重值为[1,3,6,11]

示例用法如下所示:

>>> random.choice([1,2,3,4,5,6,7,8,9,0])

1

>>> random.choice((1,2,3,4,5,6,7,8,9,0))

9

>>> random.choice("abcdefgh")

'b'

>>> temp=[1,2,3,4,5,6,7,8,9,0]

>>> random.choices(temp,k=10)

[6, 0, 6, 7, 2, 5, 4, 4, 3, 5]

>>> random.choices(temp,weights=temp,k=10)

[8, 9, 8, 3, 2, 8, 5, 9, 9, 6] # 9的相对权重为最大,经过多次选择后,被选中的概率也越大

>>> random.choices(temp,weights=[2,2,2,2,2,2,2,2,2,2],k=10)

[8, 1, 5, 4, 4, 8, 4, 5, 2, 1]

>>> random.choices(temp,cum_weights=[2,2,2,2,2,2,2,2,2,2],k=10)

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

22.1.5 sample

sample(population, k):从population选择k个元素并组成新的序列,常用于不重复的随机抽样。与choics的不同之处在于choices是选择k次,而sample是选取k个元素。

k不能大于population的元素个数

示例用法如下所示:

>>> temp=[1,2,3,4,5,6,7,8,9,0]

>>> random.sample(temp,3)

[5, 9, 2]

>>> random.sample(temp,3)

[6, 5, 7]

>>> random.sample(range(1,100),3)

[94, 96, 62]

22.1.6 shuffle

shuffle(x, random=None):常用于打乱列表中的元素,仅适用于可变序列。

示例用法如下所示:

>>> temp=[1,2,3,4,5,6,7,8,9,0]

>>> random.shuffle(temp)

>>> temp

[1, 8, 4, 7, 5, 9, 6, 3, 2, 0]

22.1.7 uniform

uniform(a, b):产生一个大小介于a~b或b~a的随机浮点数。

>>> random.uniform(10,20)

12.92109250364504

>>> random.uniform(100,20)

61.262911331961085

>>> random.uniform(-100,20)

8.388580711375894

>>> random.uniform(-100,0)

-36.12620029902773

22.2 时间日期模块

22.2.1 时间模块

Python内置的time模块可以读取系统的当前时间,方便处理时间相关的内容。

22.2.1.1 sleep函数

如果需要在程序运行阶段,暂停一会程序,则可以使用sleep函数,暂停的时间单位为秒,其使用方法也非常简单,如下所示:

>>> import time

>>> time.sleep(5)

22.2.1.2 time函数

Unix纪元是编程中经常参考的时间,其时间为1970-01-01 00:00:00,也被称为世界协调时间(UTC),而time函数返回的值为当前系统时间与UTC之间的差值,称之为UNIX时间戳,单位为秒。如下所示:

>>> import time

>>> time.time()

1590306522.6944528

UNIX时间戳可以用于测量代码的运行时间,如下所示:

import time

import random

def calcTimeDiff(func):

def wrapper():

startTime=time.time()

func()

endTime=time.time()

print(f"程序共耗时{endTime-startTime} s")

return wrapper

@calcTimeDiff

def testCode():

res=[random.uniform(-1000,9999) for i in range(9999)]

time.sleep(5)

if __name__ == '__main__':

testCode()

输出结果如下所示:

程序共耗时5.011289596557617 s

22.2.1.3 localtime函数

将时间戳转换为struct_time格式,如果传入参数为空,则取系统当前时间,示例如下所示:

>>> time.localtime()

time.struct_time(tm_year=2020, tm_mon=5, tm_mday=24, tm_hour=16, tm_min=11, tm_sec=9, tm_wday=6, tm_yday=145, tm_isdst=0)

>>> time.localtime(1590306522.6944528)

time.struct_time(tm_year=2020, tm_mon=5, tm_mday=24, tm_hour=15, tm_min=48, tm_sec=42, tm_wday=6, tm_yday=145, tm_isdst=0)

22.2.1.4 mktime函数

将元组格式的转换为时间戳格式,如下所示:

>>> time.mktime(time.localtime())

1590308257.0

>>> time.mktime((2020, 5, 24, 16, 20, 38, 1, 48, 0))

1590308438.0

22.2.1.5 asctime函数

将元组格式的时间转换为字符串格式,如果未传入参数,则默认调用time.localtime(),示例如下所示:

>>> time.asctime((2020, 5, 24, 16, 20, 38, 1, 48, 0))

'Tue May 24 16:20:38 2020'

>>> time.asctime()

'Sun May 24 16:23:04 2020'

22.2.1.6 strftime

指导指定的字符串转换为指定格式的字符串,如未传入表示时间字符串参数,则调用time.localtime(),如果传入的参数不能代表时间或越办,则抛出异常。其定义格式如下所示:

strftime(format, p_tuple=None)

示例如下所示:

>>> time.strftime("%Y-%m-%d")

'2020-05-24'

>>> time.strftime("%Y-%m-%d",time.localtime())

'2020-05-24'

>>> time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())

'2020-05-24 16:28:48'

常见的格式字符如下所示:

column

column

%a

本地星期名称简称

%A

本地星期名称全称

%b

本地月份简称

%B

本地月份全称

%d

显示对应的日期和星期

%Y

显示完整的年份,格式为YYYY

%m

显示完整的月份,格式为mm

%d

显示天数,格式为dd

%H

显示小时,24小时制

%M

显示分钟

%S

显示秒

%I

显示小时,12小时制

%j

显示当前天数在一年之内属于第几天

%p

显示am或pm

%U

显示当前星期在一年之内属于第几个星期

%w

显示一个星期中的第几天(0代表星期天)

%Z

显示本地的时区

22.2.2 datetime

time常用于获取时间戳或程序暂停。如果需要更方便的处理日期,则使用内置模块datetime。

22.2.2.1 获取当前系统时间now方法

>>> from datetime import datetime

>>> datetime.now()

datetime.datetime(2020, 5, 24, 18, 16, 56, 582298)

在调用now方法之后,返回一个datetime对象,表示当前的系统时间,包含年、月、日、时、分、秒、微秒等信息,通过以下下方式可以单独获取其值,如下所示:

>>> dt=datetime.now()

>>> dt.year,dt.month,dt.day

(2020, 5, 24)

>>> dt.hour,dt.minute,dt.second,dt.microsecond

(18, 19, 13, 437783)

22.2.2.2 转换时间戳为时间fromtimestamp

import time

>>> from datetime import datetime

>>> timeStamp=time.time()

>>> datetime.fromtimestamp(timeStamp)

datetime.datetime(2020, 5, 24, 18, 21, 53, 958894)

22.2.2.3 转换时间为时间戳timestamp

>>> dt=datetime.now()

>>> dt.timestamp()

1590316238.912804

>>> datetime.now().timestamp()

1590316265.052493

22.2.2.4 格式化日期strftime

strftime将日期格式的日期按格式化要求转换为相应的字符串格式日期。这里的日期格式化与time模块的格式非常像,示例如下所示:

>>> datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")

'2020-05-24 18:34:13.628337'

>>> dt=datetime(2020,5,24,18,35,20,123456)

>>> dt.strftime("%Y-%m-%d %H:%M:%S.%f")

'2020-05-24 18:35:20.123456'

%f:表示格式化微秒,需要注意与time模块的区别

22.2.2.5 格式化日期strptime

strptime与strftime相反,是将字符串格式的日期按格式化要求转换为相应的日期格式的日期,注意,必须是日期格式的字符串才能转换。

>>> dt="2020-05-24 18:34:13.628337"

>>> datetime.strptime(dt,"%Y-%m-%d %H:%M:%S.%f")

datetime.datetime(2020, 5, 24, 18, 34, 13, 628337)

>>> datetime.strptime("2020-05-24","%Y-%m-%d")

datetime.datetime(2020, 5, 24, 0, 0)

>>> datetime.strptime("18:44:20","%H:%M:%S")

datetime.datetime(1900, 1, 1, 18, 44, 20)

22.2.3 timedelta

tiemdelta主要用于计算两个datetime对象的差值。通常只保留days、seconds、microseconds三个值

22.2.3.1 计算时间差

>>> from datetime import datetime

>>> from datetime import timedelta

>>> now=datetime.now()

>>> now

datetime.datetime(2020, 5, 24, 18, 53, 36, 859069)

>>> addDay=now+timedelta(days=1)

>>> addDay

datetime.datetime(2020, 5, 25, 18, 53, 36, 859069)

>>> subDay=now-timedelta(days=1)

>>> subDay

datetime.datetime(2020, 5, 23, 18, 53, 36, 859069)

>>> now+timedelta(days=-10)

datetime.datetime(2020, 5, 14, 18, 53, 36, 859069)

&esmp;   虽然timedelta提供计算时间差,但却没有提供计算月份的时间差,使用time模块来进行计算,如下所示:

>>> import time

>>> nowMonth=time.localtime()[1]

>>> nowMonth

5

>>> nowMonth-1 # 上一个月

4

>>> nowMonth+1 # 下一个月

6

22.2.3.2 获取时间差总数

>>> from datetime import datetime

>>> from datetime import timedelta

>>> import time

>>> timedelta(days=2,hours=2,minutes=60,microseconds=100000)

>>> timedelta(days=2,hours=2,minutes=60,microseconds=100000).days

2

>>> timedelta(days=2,hours=2,minutes=60,microseconds=100000).seconds

10800

>>> timedelta(days=2,hours=2,minutes=60,microseconds=100000).microseconds

100000

timedelta(days=2,hours=2,minutes=60,microseconds=100000).total_seconds()

>>> 183600.1

>>> timedelta(days=2,hours=2,minutes=60,microseconds=1000000).total_seconds()

183601.0

>>> startTime=datetime.now()

>>> startTime

datetime.datetime(2020, 5, 24, 19, 12, 0, 242072)

>>> endTime=datetime.now()

>>> endTime

datetime.datetime(2020, 5, 24, 19, 12, 34, 331050)

>>> (endTime-startTime).total_seconds()

34.088978

>>> (endTime-startTime).microseconds

88978

本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:

python常用内置模块-Python基础-22常用内置模块相关推荐

  1. python系统关键字_python基础之常用关键字总结

    原博文 2018-10-23 22:30 − ## 前言 到python3.6为止,python内置的关键字有33个,比python2.7的版本多了2个.下面总结一下python3的关键字的使用. # ...

  2. python编程语言模块_Python基础编程常用模块汇总

    3.8 json模块重点 json模块是将满足条件的数据结构转化成特殊的字符串,并且也可以反序列化还原回去. 不同语言都遵循的一种数据转化格式,即不同语言都使用的特殊字符串.(比如Python的一个列 ...

  3. java 常用算法_Java基础之常用算法

    1:冒泡排序: 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处.同理,其他的元素就可以排好. public static void bubbleSort(int[] arr) { ...

  4. 第二章(1):Python入门:语法基础、面向对象编程和常用库介绍

    第二章(1):Python入门:语法基础.面向对象编程和常用库介绍 目录 第二章(1):Python入门:语法基础.面向对象编程和常用库介绍 1. Python 简介 1.1 Python 是什么? ...

  5. python基础常用语句-Python基础语法

    [TOC] 1.变量基础与简单数据类型 1.1变量解释 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间 name = 'python' number = 2017 print(na ...

  6. 【Python基础】Python处理文件的几个常用小知识

    作者:来自读者投稿 来源:Python数据之道 Python处理文件的几个常用小知识 Python 这门语言有个很大的用途就是使用它来进行文件处理,学会处理文件和保存数据可以让你的程序使用起来更加容易 ...

  7. 22 个常用的 Python 工具包

    首先我列出了最近一年内 PyPI 上下载量最高的 Python 包.我们来看看这些包的作用,它们的之间的关系,以及为什么会如此流行. Urllib3 8.93亿次下载 Urllib3 是 Python ...

  8. python基础之常用模块

    6.TEXT PROCESSING SERVICES :文本处理服务 6.1.re 8.DATA TYPES : 数据类型 8.1.datetime 8.2.collections 8.3.copy ...

  9. Python学习4 列表基础知识和常用函数

    列表 1.格式 2.增删改查 列表下标: 0–n-1 -n-(-1) #对列表进行切片 #0-(n-1) #-n-(-1) list=['dq','python','mm'] print(list[0 ...

最新文章

  1. 浅析网站如何快速提升收录量?
  2. [JavaWeb-HTML]HTML标签_文本标签_练习
  3. sql数据导入错误代码: 0x80004005_PL/SQL 非预定义异常、自定义异常处理、RAISE_APPLICATION_ERROR...
  4. 排序字段设计_内容搜索排序表达式的最佳实践
  5. python print%s s_python - print(%s's %s is %s. % \) 有具体代码,请问这种怎么解释?
  6. Java常用框架简介
  7. java转发_Java中Request请求转发详解
  8. 【设计鉴赏】精选字体设计鉴赏(三)
  9. origin 截断y轴
  10. 微信公众号数据2019_年度大榜!2019全国县级媒体公众号百强数据看过来
  11. 用c语言编写匀速直线运动,匀速直线运动知识点总结
  12. 蒲月“登高”,临风眺望,旷视邀您共赴AI的下一个十年之约
  13. [转]git图解(3):分支操作
  14. 常见的厂家的加固方式做一下总结
  15. KDJB-702继保综合检测试验仪
  16. C语言 将十六进制字符串转为十六进制数 (二进制、十进制都适用)
  17. H3C无线配置需要注意的步骤
  18. 脑网络分析软件Gretna操作--Network Analysis
  19. Java 诊断利器Arthas:快速入门
  20. Vue项目多地IP地址部署,后台配置动态IP

热门文章

  1. 与http协作的web服务器、http首部(第五章、第六章)
  2. iOS基础网络教程-Swift版本: 1.基础网络概括
  3. 优化VS 2005编译,脱离漫长的等待!
  4. python列表的解析(转)
  5. Spring源码阅读(六)
  6. 查看 并发请求数及其TCP连接状态
  7. ASP.NET MVC 5 学习教程:添加控制器
  8. 数据表列名与数据库关键字冲突,在Hibernate下的解决办法
  9. QLogic改进ASP合作计划满足共享闪存缓存市场需求
  10. [原创]关于在VS2008和VS2010中禁用及卸载Visual Assist X的方法研究