Python学习日记8
开箱即用——模块与标准库10.1 模块的基本概念10.1.1 什么是模块模块Module就是一个.py文件包含 Python 代码。通过将代码组织成模块可以实现代码复用一个模块可以被多个程序导入使用命名空间隔离避免变量名冲突逻辑组织将相关功能放在一起# 创建一个简单的模块 hello.py # hello.py 内容 print(Hello, world!) def hello(name): print(fHello, {name}!)10.1.2 导入模块import hello # Hello, world!导入时自动执行模块代码 hello.hello(Alice) # Hello, Alice!10.1.3 模块只导入一次import hello # 不输出任何内容已导入过 # import 多次只执行一次模块代码为什么只导入一次性能优化避免重复解析和执行避免循环导入问题两个模块相互导入时第二次导入不会重新执行10.1.4 重新加载模块如果修改了模块代码可以使用importlib.reload()重新加载。import importlib hello importlib.reload(hello) # 重新执行模块代码10.1.5 模块搜索路径sys.pathPython 在以下位置查找模块import sys print(sys.path) # [, /usr/lib/python3.8, /usr/lib/python3.8/site-packages, ...]如何添加自定义路径sys.path.append(/path/to/my/modules)10.2 编写自己的模块10.2.1 模块就是程序任何.py文件都可以作为模块导入。# mymodule.py def greet(name): return fHello, {name}! print(Module loaded) # 导入时会执行import mymodule # Module loaded print(mymodule.greet(Alice)) # Hello, Alice!10.2.2 模块的测试代码if __name__ __main__当模块作为程序运行时__name__的值是__main__作为模块导入时__name__是模块名。# mymodule.py def greet(name): return fHello, {name}! def test(): print(greet(world)) # 只有当直接运行此文件时才执行测试 if __name__ __main__: test()执行效果# 直接运行 python mymodule.py # Hello, world! # 作为模块导入 python -c import mymodule # 无输出10.2.3 让模块可用方法1放在 site-packages 目录import sys print(sys.path) # 找到 site-packages 目录将模块复制进去方法2设置 PYTHONPATH 环境变量export PYTHONPATH/path/to/my/modules:$PYTHONPATH方法3动态添加到 sys.pathimport sys sys.path.append(/path/to/my/modules) import mymodule10.3 包Package10.3.1 什么是包包是包含多个模块的目录必须包含__init__.py文件。mypackage/ __init__.py # 包的初始化代码 module1.py module2.py subpackage/ __init__.py module3.py10.3.2 导入包中的模块# 导入整个包 import mypackage # 执行 __init__.py # 导入包中的模块 import mypackage.module1 from mypackage import module2 from mypackage.subpackage import module3 from mypackage.module1 import some_function10.4 探索模块10.4.1dir()—— 查看模块内容import copy print(dir(copy)) # [Error, __all__, __builtins__, ...]10.4.2__all__—— 定义公共接口# copy.py 中定义了 __all__ [Error, copy, deepcopy] from copy import * # 只导入 __all__ 中列出的名称10.4.3help()—— 获取帮助help(copy.copy) # 显示函数文档10.5 常用标准库10.5.1sys—— 系统相关示例处理命令行参数import sys # reverseargs.py反转并打印参数 args sys.argv[1:] args.reverse() print( .join(args))python reverseargs.py this is a test # test a is this10.5.2os—— 操作系统接口示例启动浏览器import os import webbrowser # 更好的选择 # 使用 os.system os.system(/usr/bin/firefox) # Linux os.system(rC:\Program Files\Mozilla Firefox\firefox.exe) # Windows # 更简单的方式webbrowser webbrowser.open(http://www.python.org)示例处理路径import os from pathlib import Path # 推荐用 pathlib # 传统方式 path os.path.join(folder, subfolder, file.txt) dir_name os.path.dirname(path) base_name os.path.basename(path) # 现代方式推荐 p Path(folder) / subfolder / file.txt print(p.parent) # folder/subfolder print(p.name) # file.txt10.5.3fileinput—— 迭代文件行示例给 Python 脚本添加行号import fileinput for line in fileinput.input(inplaceTrue): # inplace 就地修改 line line.rstrip() num fileinput.lineno() print({:50} # {:2d}.format(line, num))10.5.4 集合set创建集合# 从序列创建 s set([1, 2, 3, 1, 2]) # {1, 2, 3} # 字面量 s {1, 2, 3} # 空集合 s set() # {} 是空字典集合操作a {1, 2, 3} b {2, 3, 4} # 并集 a.union(b) # {1, 2, 3, 4} a | b # {1, 2, 3, 4} # 交集 a.intersection(b) # {2, 3} a b # {2, 3} # 差集 a.difference(b) # {1} a - b # {1} # 对称差集 a.symmetric_difference(b) # {1, 4} a ^ b # {1, 4} # 子集/超集 c {2, 3} c.issubset(a) # True a.issuperset(c) # True c a # True子集 c a # True真子集冻结集合frozenset不可变可用作字典键或集合元素。s frozenset([1, 2, 3]) d {s: value} # 可以作为键10.5.5 堆heapq堆是一种优先队列最小的元素总是在索引 0。from heapq import * from random import shuffle data list(range(10)) shuffle(data) heap [] for n in data: heappush(heap, n) print(heap) # [0, 1, 3, 6, 2, 8, 4, 7, 9, 5] print(heappop(heap)) # 0 print(heappop(heap)) # 110.5.6 双端队列collections.deque双端队列支持在两端高效地添加和删除元素。from collections import deque q deque(range(5)) print(q) # deque([0, 1, 2, 3, 4]) q.append(5) # 右端添加 q.appendleft(-1) # 左端添加 print(q) # deque([-1, 0, 1, 2, 3, 4, 5]) q.pop() # 右端弹出 → 5 q.popleft() # 左端弹出 → -1 q.rotate(3) # 向右旋转3步 print(q) # deque([2, 3, 4, 0, 1])对比列表10.5.7time—— 时间处理时间表示方式时间戳timestamp从 1970-01-01 00:00:00 UTC 开始的秒数时间元组struct_time包含 9 个字段的元组常用函数import time # 当前时间戳 timestamp time.time() # 1700000000.123 # 时间戳 → 时间元组本地时间 local time.localtime(timestamp) # 时间元组 → 字符串 time.asctime(local) # Tue Nov 14 10:30:00 2023 # 时间戳 → 字符串一次性 time.ctime(timestamp) # Tue Nov 14 10:30:00 2023 # 字符串 → 时间元组 time.strptime(2023-11-14, %Y-%m-%d) # 休眠 time.sleep(1) # 暂停1秒10.5.8random—— 随机数生成import random # 基本随机数 random.random() # 0.784... random.uniform(0, 10) # 6.234... random.randrange(1, 11) # 71~10之间的整数 # 序列操作 colors [red, green, blue] random.choice(colors) # green random.shuffle(colors) # [blue, red, green] random.sample(colors, 2) # [red, green]示例生成随机日期from random import uniform from time import mktime, localtime, asctime # 2016年内的随机时间 date1 (2016, 1, 1, 0, 0, 0, -1, -1, -1) date2 (2017, 1, 1, 0, 0, 0, -1, -1, -1) time1 mktime(date1) time2 mktime(date2) random_time uniform(time1, time2) print(asctime(localtime(random_time)))10.5.9shelve—— 持久化存储shelve提供了类似字典的接口但数据会保存到文件中。import shelve # 打开数据库 db shelve.open(mydata.db) # 像字典一样使用 db[name] Alice db[scores] [85, 92, 78] # 读取 print(db[name]) # Alice # 关闭 db.close()重要陷阱修改存储的对象需要重新赋值。db shelve.open(mydata.db) db[scores] [85, 92, 78] # 错误方式修改不会保存 db[scores].append(95) print(db[scores]) # [85, 92, 78]未保存 # 正确方式 scores db[scores] scores.append(95) db[scores] scores # 重新赋值才会保存 db.close()使用writebackTrue自动跟踪修改db shelve.open(mydata.db, writebackTrue) db[scores].append(95) # 自动保存 db.close()10.5.10json—— JSON 数据交换JSON 是跨语言的数据交换格式。import json # Python 对象 → JSON 字符串 data {name: Alice, age: 25, scores: [85, 92]} json_str json.dumps(data) print(json_str) # {name: Alice, age: 25, scores: [85, 92]} # JSON 字符串 → Python 对象 parsed json.loads(json_str) print(parsed[name]) # Alice # 读写文件 with open(data.json, w) as f: json.dump(data, f) with open(data.json, r) as f: loaded json.load(f)类型对照表10.5.11re—— 正则表达式常用函数基本语基本语法示例匹配邮件地址import re text From: Alice aliceexample.com To: Bob bobtest.org # 查找所有邮件地址 pattern r[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,} matches re.findall(pattern, text) print(matches) # [aliceexample.com, bobtest.org] # 使用分组提取用户名和域名 pattern r([a-zA-Z0-9._%-])([a-zA-Z0-9.-]\.[a-zA-Z]{2,}) for match in re.findall(pattern, text): print(fUser: {match[0]}, Domain: {match[1]})示例提取 HTML 标签内容html a href/jobs/1970/Python Engineer/a pattern re.compile(a href(/jobs/\\d)/(.*?)/a) for url, title in pattern.findall(html): print(f{title}: {url})贪婪 vs 非贪婪text *This* is *it*! # 贪婪模式匹配尽可能多 greedy r\*(.)\* print(re.sub(greedy, rem\1/em, text)) # emThis* is *it/em! # 非贪婪模式匹配尽可能少用 ? non_greedy r\*(.?)\* print(re.sub(non_greedy, rem\1/em, text)) # emThis/em is emit/em!10.6 其他有用的标准库

相关新闻

应届生想做 AI 应用开发,这些互联网公司值得优先考虑

应届生想做 AI 应用开发,这些互联网公司值得优先考虑

AI应用开发方向应届生求职:大厂、大模型创业、传统互联网AI转型怎么选?摘要:对于想入局AI应用开发的应届生,选工作本质是选择技术栈、业务场景与个人成长路径。本文梳理平台大厂、大模型创业公司、成熟互联网AI转型企业三类机会&a…

2026/8/25 5:51:40 阅读更多 →
开源跨平台手写笔记应用:从压感优化到自部署同步全解析

开源跨平台手写笔记应用:从压感优化到自部署同步全解析

这次我们来看一个专门为手写笔用户设计的开源跨平台笔记应用。对于习惯用笔记录、绘图、批注的用户来说,找到一个能完美适配手写笔压感、低延迟、跨设备同步,并且完全免费开源的软件,一直是个痛点。市面上的商业软件要么收费昂贵,…

2026/8/25 5:50:40 阅读更多 →
构建AI编码智能体工作台:从碎片化辅助到流式协作的开发新范式

构建AI编码智能体工作台:从碎片化辅助到流式协作的开发新范式

如果你是一名开发者,最近一定被各种 AI 编程助手轮番轰炸过。从 GitHub Copilot 到 Cursor,再到层出不穷的本地模型,它们都在承诺一件事:让写代码更快。但真正用起来,你会发现一个尴尬的现实: 工具变多了&…

2026/8/25 5:50:40 阅读更多 →

最新新闻

Claude Code动态工作流与OpenClaw.NET MetaSKILL框架融合实践

Claude Code动态工作流与OpenClaw.NET MetaSKILL框架融合实践

1. 项目概述:当Claude Code遇上OpenClaw.NET最近在AI编程工具圈里,一个话题讨论得挺热:Claude Code的动态工作流,和OpenClaw.NET的MetaSKILL框架,到底该怎么选,或者说,它们能怎么结合&#xff1…

2026/8/26 7:56:41 阅读更多 →
AI赋能软件测试:100+实战工具提升测试效率与质量

AI赋能软件测试:100+实战工具提升测试效率与质量

1. 项目概述:当AI遇见软件测试,一场效率革命正在发生最近和几个测试团队的朋友聊天,大家不约而同地都在讨论同一个话题:AI工具。不再是几年前那种“听起来很酷但用不起来”的概念,而是实打实地开始渗透到日常的测试设计…

2026/8/26 7:56:41 阅读更多 →
YOLO自行车检测数据集实战:VOC格式转换与训练全流程

YOLO自行车检测数据集实战:VOC格式转换与训练全流程

简介:目标检测是计算机视觉的核心任务之一,YOLO作为主流检测框架,以其高效和易用性被广泛采用。在模型训练前,数据准备与格式转换是决定项目成败的关键环节。PASCAL VOC是经典的检测数据集,其标注为XML格式&#xff0c…

2026/8/26 7:56:41 阅读更多 →
挖掘机检测数据集实战:COCO JSON标注与智慧工地应用

挖掘机检测数据集实战:COCO JSON标注与智慧工地应用

简介:目标检测是计算机视觉的核心任务之一,在智慧工地等垂直场景中,通用模型往往因缺乏领域数据而失效,而高质量数据集与合理的标注格式直接决定了模型性能的上限。COCO JSON作为主流标注规范,能够完整描述目标边界框、…

2026/8/26 7:56:41 阅读更多 →
Fuse语言:静态类型与函数式编程如何提升代码可维护性

Fuse语言:静态类型与函数式编程如何提升代码可维护性

如果你也是第一次在技术社区看到 Fuse 这个静态类型函数式编程语言项目的标题,可能会好奇:为什么又冒出一门新语言?这个疑问很正常。过去几年,类型系统的概念已经慢慢从学术圈走进日常开发,函数式风格也不再是少数人的…

2026/8/26 7:56:41 阅读更多 →
MATLAB效度分析实战:从数据清洗到结构效度验证

MATLAB效度分析实战:从数据清洗到结构效度验证

1. 效度分析不是“跑个函数就完事”:MATLAB里最容易被误解的数模基础环节 效度分析在数学建模中常被当作“交卷前补上的最后一道工序”——学生查几个指标、套个现成代码、截图贴进论文附录,就算完成。但我在带三届校赛、两届国赛队伍的过程中反复发现&a…

2026/8/26 7:55:40 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录: 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中,主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段,转入了政务服务的常态化落地应用;在实际使用过程中,它能自主理解办事需求、辅助完成填报申报、开展材料预审,并联动多个系统协同作业,真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/25 10:31:12 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →