之前我们学过 sleep 函数,使用这个函数可以让程序暂停几秒钟,但是,使用这个函数需要导入 time 模块。那么模块是什么呢?
在 Python 开发过程中,随着程序代码越写越多,写在一个文件里的代码就会越来越长,越来越不容易维护。
为了让代码方便维护,我们将代码进行分类,分别放到不同的文件里。这样,所有的代码都按照一定的规则分布在各个文件里,需要使用的时候只要导入相应的文件即可。在 Python 中,这样的文件被称之为模块(Module)。
具体模块是怎么开发的,我们下一节再说。这节我们来了解一些 Python 系统自带的一些模块,又叫内置模块。
之前我们学过的 time 模块,就是内置模块中的一个。time 模块除了 sleep 函数,还有获得当前时间和获得时间戳的函数:
拷贝代码试一试:
import time# 输出当前时间print(time.ctime())# 输出时间戳print(time.time())# 暂停 3 秒钟time.sleep(3)# 再来一遍print(time.ctime())print(time.time()) |
大家可以看到,输出的当前时间还是很好理解的,但是时间戳却是一个很长的难以理解的数字。其实,时间戳是指格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒起至现在的总秒数。Unix 时间戳只是一个单纯不断增长的数字,所以不会存在时区等问题,全球统一,简单便捷。
有时候我们会在一些网站上发现一些 bug(即程序漏洞,逻辑错误),比如展示的用户生日是 1970 年 1 月 1 日,或者某篇文章的发表时间是1970 年 1 月 1 日等,你会觉得不可思议,其实这就是错误的把 0 当做时间戳存进了数据库。可见,在数据存储的时候,日期和时间一般都是存时间戳的。
datetime 模块是跟 time 相似的一个模块,不过功能更加强大一些,我们来做个示例:
拷贝代码试一试:
# datetime 文件中有多个模块,所以导入的时候,用 from ... import ... 的格式from datetime import datetime, timedelta# 获取当前时间print(datetime.now())# 将时间戳转换成时间print(datetime.fromtimestamp(1607250163.3933873))# 获得当前时间减去 5 天的时间print(datetime.now() - timedelta(days=5))# 获得当前时间减去 5 周的时间print(datetime.now() - timedelta(weeks=2))# 获得当前时间加上 2 小时的时间print(datetime.now() + timedelta(hours=2))# timedelta 函数支持多个参数,比如把分钟,秒,毫秒,微秒都放进去print(datetime.now() + timedelta(minutes=2, seconds=-200))print(datetime.now() + timedelta(days=1, milliseconds=-200, microseconds=-100)) |
当然,datetime 模块和 time 模块的功能并不止这些,大家可以通过百度去了解更多。一定要多了解,多练习。
下面我们再来了解一下比较常用的 random 模块和 math 模块。
random 模块是用来生成随机数的工具,常用的函数示例:
拷贝代码试一试:
# 导入 random 模块import random# 随机生成 0-1 之间的浮点数,包括 0,不包括 1print(random.random())# 随机生成 0-5 之间的整数,包括 0 和 5print(random.randint(0, 5))# 随机生成 0-5 之间的浮点数,包括 0 和 5print(random.uniform(0, 5))# 从非空序列中随机返回一个元素print(random.choice([1, 2, 3])) |
我们可以根据上面的函数调用方式,来做一个简单的抽奖程序:
拷贝代码试一试:
# 来搞一个抽奖程序import random# 前来抽奖的人someone = ["路人甲", "路人乙", "路人丙"]# 自己人friends = ["暖场A", "暖场B"]# 抽奖,让自己人被抽中的概率是其他人的二倍print(random.choice(friends*2 + someone)) |
上面的程序,虽然给了自己人一些“照顾”,但是大奖还是被路人甲给拿走了,看来运气也是一种实力啊。不过大家一定要理解一下这里的“照顾”是什么原理,以后说不定会用上。
下面我们来了解一些 math 模块常用的方法:
拷贝代码试一试:
import math# 向上取整print(math.ceil(2.3))print(math.ceil(2.9))# 向下取整print(math.floor(2.3))print(math.floor(2.9))# 取平方根print(math.sqrt(4))# 数学常数 πprint(math.pi)# 数学常数 eprint(math.e) |
更多的 math 模块方法请参考官网教程:
https://docs.python.org/zh-cn/3/library/math.html
本节学习的内置模块都是 Python 中众多模块的一部分,以后大家用到更多的话,需要靠百度来自行学习。
今天我们来两个作业,第一个是去百度查一下如何给列表中的元素随机排序(当然是用 random 中的某个函数),并写一个实例。
第二个作业是为你们公司写一个抽奖程序,并设置每个人被抽中概率的权重,普通员工一倍权重,领导二倍权重,对公司有特殊贡献的三倍权重,你自己五倍权重。