day-023-包管理与标准库

发布时间:2026/7/6 2:58:17

day-023-包管理与标准库 Day 23包管理与常用标准库昨天学了单个 .py 模块。今天学包把多个模块组织成文件夹然后一口气认识 Python 标准库中最实用的几个模块。一、包——把模块装进文件夹当模块变多时需要文件夹来组织mylib/ # 这是一个包 ├── __init__.py # 包的标识文件可以为空 ├── math_utils.py # 数学工具模块 ├── string_utils.py # 字符串工具模块 └── file_utils.py # 文件工具模块__init__.py是包的必要文件表明这个文件夹是一个 Python 包。# math_utils.pydeffactorial(n):ifn1:return1returnn*factorial(n-1)# string_utils.pydeftruncate(s,max_len):returns[:max_len]...iflen(s)max_lenelses使用方式importmylib.math_utilsprint(mylib.math_utils.factorial(5))# 120frommylib.string_utilsimporttruncateprint(truncate(Hello World,5))# Hello...frommylibimportfile_utilsfrommylibimportmath_utilsasmu# 长路径起别名print(mu.factorial(6))# 720init.py 的高级用法# mylib/__init__.py我的工具库# 控制 from mylib import * 导出的内容__all__[math_utils,string_utils]# 预先导入子模块让用户可以直接 mylib.func()from.importmath_utilsfrom.importstring_utils这样用户可以直接import mylib; mylib.math_utils.factorial(5)。二、常用标准库速览1. os —— 操作系统接口importos# 当前工作目录print(os.getcwd())# 环境变量print(os.environ.get(PATH,未设置))# 路径操作pathos.path.join(folder,subfolder,file.txt)print(path)# folder\subfolder\file.txt# 创建/删除目录os.makedirs(parent/child,exist_okTrue)# os.rmdir(parent/child) # 删除空目录2. sys —— 系统相关importsys# 命令行参数print(sys.argv)# [main.py, arg1, arg2]# Python 版本print(sys.version)# 3.12.x# 添加模块搜索路径sys.path.append(/my/custom/path)使用sys.argv让程序接收命令行参数# greet.pyimportsysiflen(sys.argv)2:print(用法python greet.py 名字)sys.exit(1)namesys.argv[1]print(f你好{name})$ python greet.py 小明 你好小明3. datetime —— 日期时间处理fromdatetimeimportdatetime,date,timedelta# 当前时间nowdatetime.now()print(now)# 2026-05-21 15:30:00.123456# 格式化输出print(now.strftime(%Y-%m-%d %H:%M:%S))# 2026-05-21 15:30:00print(now.strftime(%Y年%m月%d日))# 2026年05月21日# 解析字符串dtdatetime.strptime(2026-05-21,%Y-%m-%d)print(dt.year)# 2026# 日期运算todaydate.today()tomorrowtodaytimedelta(days1)one_week_agotoday-timedelta(weeks1)print(f明天{tomorrow})print(f一周前{one_week_ago})# 计算两个日期相差多少天birthdaydate(2000,1,1)days_alive(today-birthday).daysprint(f活了{days_alive}天)4. random —— 随机数importrandom# 随机浮点数 [0, 1)print(random.random())# 随机整数 [a, b]print(random.randint(1,10))# 从列表中随机选fruits[苹果,香蕉,橙子]print(random.choice(fruits))# 随机打乱cards[1,2,3,4,5]random.shuffle(cards)print(cards)# 随机抽样不重复print(random.sample(range(1,50),6))# 大乐透选号# 设置随机种子让结果可复现random.seed(42)print(random.random())# 每次一样方便调试5. collections —— 高级数据结构fromcollectionsimportCounter,defaultdict,namedtuple# Counter计数器textabracadabrachar_countCounter(text)print(char_count)# Counter({a: 5, b: 2, r: 2, c: 1, d: 1})print(char_count.most_common(2))# [(a, 5), (b, 2)]# defaultdict带默认值的字典ddefaultdict(int)# 不存在的键默认返回 0d[a]1print(d[a])# 1print(d[b])# 0 (不是 KeyError)# namedtuple有名字的元组Pointnamedtuple(Point,[x,y])pPoint(3,4)print(p.x,p.y)# 3 4print(p[0],p[1])# 3 4 (仍然是元组)三、实战一个命令行小工具# countdown.py —— 倒计时工具计数生活中的重要日期fromdatetimeimportdatedefdays_until(year,month,day):计算距离指定日期还有多少天targetdate(year,month,day)todaydate.today()diff(target-today).daysifdiff0:returnf还有{diff}天elifdiff0:return就是今天else:returnf已经过去{-diff}天了if__name____main__:importsysiflen(sys.argv)4:print(用法python countdown.py 年 月 日)print(示例python countdown.py 2027 1 1)else:year,month,daymap(int,sys.argv[1:4])print(days_until(year,month,day))四、今日学习总结学习内容掌握情况一句话要点包的概念✅ 重点文件夹 __init__.py 包包内导入✅ 理解from . import xxx相对导入os 模块✅ 了解路径拼接、目录创建sys 模块✅ 重点sys.argv 获取命令行参数datetime 模块✅ 重点strftime 格式化timedelta 运算random 模块✅ 了解随机数、打乱、抽样collections✅ 了解Counter、defaultdict、namedtuple今日踩坑记录相对导入犯糊涂from . import xxx是相对导入当前包内from xxx import yyy是绝对导入。在包内部建议用相对导入避免路径问题。datetime 和 date 容易混datetime包含年月日时分秒date只有年月日。看需求选用。random 不适合密码学random模块是伪随机安全场景加密、token生成请用secrets模块。五、明天学什么标准库暂告一段落。明天开始面向对象编程OOP——类与对象、__init__、self。面向对象是 Python 进阶的分水岭。Python 标准库就像一个巨大的工具箱。你不需要全部背下来但要知道大概有个什么工具能用。需要时查文档就行。第23天打卡完成。明天见本系列是个人学习笔记如有错误欢迎在评论区指正交流。

相关新闻