当前位置:   article > 正文

python的内置模块

python的内置模块

内置模块 I

除了我们自己写的模块之外,Python 中还内置了大量非常实用的模块。其实,我们之前的代码中就已经使用过几个内置模块了,比如 time 模块和 random 模块。

Python 的内置模块非常多,今天我们介绍几个常用的模块。废话少说,我们直接来看代码!

time 模块

  1. # 导入time 模块
  2. import time
  3. # 暂停程序的执行,参数为秒
  4. time.sleep(3) # 暂停 3 秒再执行后续代码

time.sleep() 它用于暂停程序的执行,参数为秒。它可以用于防止程序执行过快,比如爬取数据时降低爬取速率防止被封等。

  1. import time
  2. # 获取当前时间的 Unix 时间戳
  3. print(time.time())
  4. # 输出:1558329240.201314

Unix 时间戳是指格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒起至现在的总秒数。Unix 时间戳只是一个单纯不断增长的数字,所以不会存在时区等问题,全球统一,简单便捷。

拓展:在 32 位的机器上 Unix 时间戳的最大值为 2147483647,即 2038 年 1 月 19 日 03:14:07。届时所有 32 位操作系统的时间将会出错,变成 1901 年 12 月 13 日。而 64 位系统的最大值可达到 2900 亿年后的 292277026596 年 12 月 4 日 15:30:08,我们完全不必为此担忧。

Unix 时间戳对计算机来说稍微计算一下就知道现在是什么时间了,但对人类来说可读性就大打折扣了,所以还有对人类友好的 ctime() 方法:

  1. import time
  2. print(time.ctime())
  3. # 输出:Mon June 04 19:13:00 2024

datetime 模块

datetime 模块包括很多函数和类,这些函数和类均用于日期和时间的解析、格式化以及计算。老师今天只给你介绍其中的几个,更多的内容等你需要时再自行探索。

  1. # 导入 datetime 模块中的 datetime 对象
  2. from datetime import datetime
  3. # 获取当前时间
  4. print(datetime.now())
  5. # 输出:2024-06-04 19:12:00.201314
  6. # 将 Unix 时间戳转换成时间
  7. print(datetime.fromtimestamp(1558329240.201314))
  8. # 输出:2024-06-04 19:13:00.201314

注意,datetime 模块里有一个同名的 datetime 类,因此我们要写成 from datetime import datetime

datetime.now() 和 time.ctime() 类似,都是获取人类可读的时间格式,只是 datetime.now() 没有星期几的信息。

有些时候我们拿到 Unix 时间戳却不知道具体时间,可以使用 datetime.fromtimestamp() 方法来将其转换成人类可读的时间格式。

有些时候我们还要进行日期的计算,比如 5 天前是几月几号,10 天后又是几月几号等。这在 Python 中实现起来也不难,我们来看个例子:

  1. from datetime import datetime, timedelta
  2. print(datetime.now() - timedelta(days=5))
  3. # 输出:2024-06-04 19:14:00.201314

timedelta() 在日期计算中很实用,上面代码中的 timedelta(days=5) 表示 5 天,用现在的时间减去 5 天就能得到 5 天前的日期。同理,如果加上 5 天就能得到 5 天后的日期了。

你应该注意到了,调用 timedelta() 时传的是关键字参数 days=5,表示 5 天。其实除了天之外,timedelta() 还支持传入周、时、分、秒、毫秒和微秒,我们来看看这些参数名都是什么:

  1. from datetime import datetime, timedelta
  2. # 周(weeks)
  3. print(datetime.now() - timedelta(weeks=2))
  4. # 输出:2024-05-21 19:19:18.013844
  5. # 时(hours)
  6. print(datetime.now() + timedelta(hours=2))
  7. # 输出:2024-06-04 21:19:18.013891
  8. # 分(minutes)
  9. print(datetime.now() + timedelta(minutes=2))
  10. # 输出:2024-06-04 19:21:18.013898
  11. # 秒(seconds)
  12. print(datetime.now() + timedelta(seconds=2))
  13. # 输出:2024-06-04 19:19:20.013903
  14. # 毫秒(milliseconds)
  15. print(datetime.now() + timedelta(milliseconds=2))
  16. # 输出:2024-06-04 19:19:18.015907
  17. # 微秒(microseconds)
  18. print(datetime.now() + timedelta(microseconds=2))
  19. # 输出:2024-06-04 19:19:18.013914

如果你英文还不错,这些参数对你来说肯定很简单吧!还有,timedelta() 可以支持同时传入多个参数,比如计算两个半小时前的时间:

  1. from datetime import datetime, timedelta
  2. print(datetime.now() - timedelta(hours=2, minutes=30))
  3. # 输出:2024-06-04 16:50:22.493242

内置模块 II

上一节中介绍了两个关于时间的模块,这一节我们来看看两个关于数字的模块。

random 模块

random 模块之前也有提及,今天我们来正式学习它。从模块名称我们就能猜出它应该和 随机 有关,random 模块本身很简单,我们直接来看几个例子:

  1. # 导入 random 模块
  2. import random
  3. # 随机生成 0-1 之间的浮点数,包括 0,不包括 1
  4. print(random.random())
  5. # 输出:0.878022926133
  6. # 随机生成 0-5 之间的整数,包括 0 和 5
  7. print(random.randint(0, 5))
  8. # 输出:3
  9. # 随机生成 0-5 之间的浮点数,包括 0 和 5
  10. print(random.uniform(0, 5))
  11. # 输出:4.86369987147
  12. # 从非空序列中随机返回一个元素
  13. print(random.choice([1, 2, 3]))
  14. # 输出:2

random.random() 可以生成 0-1 之间的随机小数,包括 0,不包括 1。这是最基本的生成随机数的方法,同时 random 模块还帮我们封装了一些更好用的方法——random.randint()random.uniform() 和 random.choice()

random.randint(m, n) 可以生成一个随机整数,该整数大于等于 m,小于等于 n。random.uniform(m, n) 也是类似的,只不过生成的是随机小数,该小数大于等于 m,小于等于 n。

注意:random.randint() 和 random.uniform() 生成的随机数是包含后面一个数的,这点和 random.random() 还有分片不同。

random.choice() 可以从一个非空序列中随机返回一个元素,常常用于抽奖:

  1. import random
  2. winner = random.choice(['小贝', '闻闻', '黄帮主'])
  3. print('大奖得主是' + winner)
  4. # 输出:大奖得主是黄帮主

需要注意的是,参数一定得是非空序列,否则将会报错:

  1. import random
  2. random.choice([])
  3. # 报错:IndexError: Cannot choose from an empty sequence

math 模块

math 模块从名称也可知是和数学相关的,在做一些数学计算时会用到,这里简单介绍一下:

  1. # 导入 math 模块
  2. import math
  3. # 向上取整
  4. print(math.ceil(2.3))
  5. # 输出:3
  6. print(math.ceil(2.9))
  7. # 输出:3
  8. # 向下取整
  9. print(math.floor(2.3))
  10. # 输出:2
  11. print(math.floor(2.9))
  12. # 输出:2
  13. # 取平方根
  14. print(math.sqrt(4))
  15. # 输出:2.0
  16. # 数学常数 π
  17. print(math.pi)
  18. # 输出:3.14159265359

上面这些方法是比较常用的,同时 math 模块里还有很多其他方法和常数。对数学计算有需要的同学可以查看文档了解更多,文档地址是:math --- 数学函数 — Python 3.12.3 文档

经过这两关的学习,我们知道了如何利用 模块 的思想,把一个个独立的 .py 文件组织在一起,也了解了 Python 中几个内置模块的用法。一起来复习下吧~

课后练习:剪刀石头布

你肯定玩过“石头、剪刀、布”的游戏,学完了 random 模块后,我们来写一个 Python 版的“石头、剪刀、布”,然后和电脑玩一次“石头、剪刀、布”吧!

  1. import random
  2. choices = ['石头', '剪刀', '布']
  3. your_choice = input('请输入石头、剪刀或布')

极简风的解决方案:

  1. import random
  2. your_choice = input('请输入石头、剪刀或布')
  3. choices = ['石头', '剪刀', '布']
  4. # 赢的情况
  5. wins = [['石头','剪刀'],['剪刀','布'],['布','石头']]
  6. if your_choice in choices:
  7. # 机器人出的
  8. ran = random.randint(0,len(choices) - 1)
  9. if your_choice == choices[ran]:
  10. print('你赢了')
  11. elif [your_choice, choices[ran]] in wins:
  12. print('平局')
  13. else:
  14. print('你输了')
  15. else:
  16. print('输入有误')

可能对逻辑不太熟悉,也可以使用下面的方法:

  1. import random
  2. your_choice = input('请输入石头、剪刀或布')
  3. choices = ['石头', '剪刀', '布']
  4. # 赢的情况
  5. wins = [['石头','剪刀'],['剪刀','布'],['布','石头']]
  6. if your_choice in choices:
  7. # 机器人出的
  8. ran = random.randint(0,len(choices) - 1)
  9. if your_choice == choices[ran]:
  10. print('平局')
  11. else:
  12. for win in wins:
  13. if win[0] == your_choice:
  14. if win[1] == choices[ran]:
  15. print('你出 '+ your_choice + ' > 机器人出 '+ choices[ran] +' 所以你赢了')
  16. break
  17. else:
  18. print('你出 '+ your_choice + ' < 机器人出 '+ choices[ran] +' 所以你输了')
  19. break
  20. else:
  21. continue
  22. else:
  23. print('输入有误')

课后练习:满当当的日程表

闻闻最近忙到起飞。从 当前时间 开始算,2 小时 后,闻闻要去参加公开课;6 小时 后,她要开始整理学员信息;2 天 后,她要去深圳参加行业交流会。

要求打印一个日程后,隔 0.5 秒 再打印下一个日程。请你用 time 模块 和 datetime 模块 编写代码,打印出闻闻的日程表。

  1. # 导入必要的模块
  2. print('参加公开课的时间是:')
  3. # 打印时间
  4. # 隔 0.5 秒打印下一个日程
  5. print('整理学员信息的时间是:')
  6. # 打印时间
  7. # 隔 0.5 秒打印下一个日程
  8. print('参加行业交流会的时间是:')
  9. # 打印时间

优化后的代码为:

  1. # 导入必要的模块
  2. import time
  3. from datetime import datetime, timedelta
  4. print('参加公开课的时间是:' + str(datetime.now() + timedelta(hours = 2)))
  5. # 打印时间
  6. # 隔 0.5 秒打印下一个日程
  7. time.sleep(0.5)
  8. print('整理学员信息的时间是:' + str(datetime.now() + timedelta(hours = 6)))
  9. # 打印时间
  10. # 隔 0.5 秒打印下一个日程
  11. time.sleep(0.5)
  12. # 打印时间
  13. print('参加行业交流会的时间是:' + str(datetime.now() + timedelta(days = 2)))
  14. # 输出结果:
  15. # 参加公开课的时间是:2024-06-05 11:06:05.989400
  16. # 整理学员信息的时间是:2024-06-05 15:06:06.493800
  17. # 参加行业交流会的时间是:2024-06-07 09:06:06.995300

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/697165
推荐阅读
相关标签
  

闽ICP备14008679号