news 2026/3/26 21:14:11

【MVCD 6】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【MVCD 6】

CS 41 课程八:标准库(5月23日)

一、课程基本信息

日期:2023年5月23日
主题:Standard Libraries(标准库)

期末项目提醒

  • 截止日期:14天后
  • 建议:接下来几周随时可以与我们会面

二、课前补充:函数式编程(续)

Lambda:匿名内联函数

1. Lambda语法

基本格式

lambdaparams:expression
2. Lambda vs 普通函数

普通函数定义

defsquare_add_two(x,y):returnx**2+y**2

等价的Lambda表达式

lambdax,y:x**2+y**2

语法分解

lambdax,y:x**2+y**2↑ ↑ 参数 表达式
3. 调用Lambda函数

直接调用

(lambdax,y:x**2+y**2)(8,5)# => 89

说明

  • Lambda定义放在括号内
  • 参数放在定义后的括号内
  • 立即执行并返回结果

Map函数

1. Map的作用

功能

  • 接受一个函数和一个可迭代对象
  • 将函数应用到可迭代对象的每个元素
2. Map实例
numbers=[1,2,3,4,5]# 使用map和lambda函数对每个数字求平方squared_numbers=list(map(lambdax:x**2,numbers))print(squared_numbers)# => [1, 4, 9, 16, 25]

工作流程

numbers: [1, 2, 3, 4, 5] ↓ ↓ ↓ ↓ ↓ lambda x: x**2: 1² 2² 3² 4² 5² ↓ ↓ ↓ ↓ ↓ result: [1, 4, 9, 16, 25]

练习环节:Let’s Try Some Out


三、标准库概述

1. 什么是标准库?

定义

  • 随Python一起提供的包和模块
  • 被开发者视为重要/基础的功能
  • 只需要import即可访问

2. 模块与包的区别

模块(Module)

  • 可重用Python代码的最小单元
  • 基本上就是一个包含函数和语句的文件
  • 我们一直在编写模块

包(Package)

  • 模块的逻辑集合
  • 例如:numpy、random等

层级关系

包(Package) └── 模块(Module) └── 函数/类/变量

3. 标准库文档

官方文档地址

  • https://docs.python.org/3/library/

四、Import导入规范

导入方式对比

方式1:导入整个包
importsound sound.effects.echo.echofilter(a,b)
方式2:导入子模块
fromsound.effectsimportecho echo.echofilter(a,b)
方式3:导入特定函数
fromsound.effects.echoimportechofilter echofilter(a,b)

导入方式选择

方式优点缺点适用场景
import sound命名空间清晰调用路径长避免命名冲突
from sound.effects import echo调用简洁中等命名空间使用多个函数
from sound.effects.echo import echofilter最简洁可能命名冲突只用少数函数

五、常用标准库详解

1. pickle - 对象序列化

功能介绍
  • 序列化/反序列化Python对象
  • 将Python对象转换为二进制表示
使用场景

1. 高效存储数据

importpickle# 保存对象data={'name':'Alice','scores':[95,87,91]}withopen('data.pkl','wb')asf:pickle.dump(data,f)# 加载对象withopen('data.pkl','rb')asf:loaded_data=pickle.load(f)

2. 进程间传递信息

  • 在不同进程之间传递复杂对象
  • 保持对象的完整结构
实例演示

An example(课堂演示)

⚠️ 安全警告

Pickle安全问题

  • 不要反序列化不可信来源的数据
  • pickle可以执行任意代码
  • 只用于可信来源的数据

安全建议

# ❌ 危险:加载未知来源的pickle文件withopen('untrusted.pkl','rb')asf:data=pickle.load(f)# 可能执行恶意代码# ✓ 安全:只加载自己创建的文件withopen('my_data.pkl','rb')asf:data=pickle.load(f)

2. pdb - Python调试器

两种使用方式

方式1:文件内调试

importpdbdefbuggy_function(x,y):pdb.set_trace()# 设置断点result=x/yreturnresult

方式2:终端调试

python3-mpdb file.py
常用pdb命令
命令说明
n(next)执行下一行
s(step)进入函数
c(continue)继续执行
l(list)显示代码
p variable打印变量
b line设置断点
q(quit)退出调试

3. collections - 特殊容器类型

主要数据结构

常用容器

1. Counter - 计数器

fromcollectionsimportCounter words=['apple','banana','apple','cherry','banana','apple']counter=Counter(words)# Counter({'apple': 3, 'banana': 2, 'cherry': 1})counter.most_common(2)# [('apple', 3), ('banana', 2)]

2. defaultdict - 默认字典

fromcollectionsimportdefaultdict dd=defaultdict(list)dd['fruits'].append('apple')# 不需要先初始化dd['fruits'].append('banana')# {'fruits': ['apple', 'banana']}

3. deque - 双端队列

fromcollectionsimportdeque dq=deque([1,2,3])dq.appendleft(0)# 左端添加dq.append(4)# 右端添加# deque([0, 1, 2, 3, 4])

4. namedtuple - 命名元组

fromcollectionsimportnamedtuple Point=namedtuple('Point',['x','y'])p=Point(11,22)print(p.x,p.y)# 11 22

4. functools - 函数工具

主要功能

1. @lru_cache - 缓存装饰器

fromfunctoolsimportlru_cache@lru_cache(maxsize=128)deffibonacci(n):ifn<=1:returnnreturnfibonacci(n-1)+fibonacci(n-2)

2. partial - 部分函数

fromfunctoolsimportpartialdefpower(base,exponent):returnbase**exponent square=partial(power,exponent=2)cube=partial(power,exponent=3)square(5)# => 25cube(5)# => 125

3. reduce - 归约函数

fromfunctoolsimportreducenumbers=[1,2,3,4,5]product=reduce(lambdax,y:x*y,numbers)# => 120 (1 * 2 * 3 * 4 * 5)

5. itertools - 迭代器工具

常用函数

1. count - 无限计数

fromitertoolsimportcount counter=count(start=10,step=2)# 10, 12, 14, 16, 18, ...

2. cycle - 循环迭代

fromitertoolsimportcycle colors=cycle(['red','green','blue'])# red, green, blue, red, green, blue, ...

3. chain - 链接迭代器

fromitertoolsimportchainlist(chain([1,2],[3,4],[5,6]))# => [1, 2, 3, 4, 5, 6]

4. combinations - 组合

fromitertoolsimportcombinationslist(combinations('ABC',2))# => [('A', 'B'), ('A', 'C'), ('B', 'C')]

5. permutations - 排列

fromitertoolsimportpermutationslist(permutations('ABC',2))# => [('A', 'B'), ('A', 'C'), ('B', 'A'),# ('B', 'C'), ('C', 'A'), ('C', 'B')]

6. re - 正则表达式

正则表达式基础

电话号码匹配示例

importre pattern=r"\(\d{3}\)[- ]\d{3}-\d{4}"phone="(123) 456-7890"ifre.match(pattern,phone):print("Valid phone number")

模式解释

\(\d{3}\) [- ] \d{3} - \d{4} ↓ ↓ ↓ ↓ ↓ (123) 空格或- 456 - 7890
常用正则操作

1. 搜索匹配

importre text="Email: user@example.com"match=re.search(r'[\w\.-]+@[\w\.-]+',text)ifmatch:print(match.group())# user@example.com

2. 查找所有匹配

text="Numbers: 42, 123, 7"numbers=re.findall(r'\d+',text)# ['42', '123', '7']

3. 替换

text="Hello World"new_text=re.sub(r'World','Python',text)# "Hello Python"

4. 分割

text="apple,banana;cherry:date"fruits=re.split(r'[,;:]',text)# ['apple', 'banana', 'cherry', 'date']

六、非标准库包

1. 需要单独安装的包

说明

  • 不在标准库中的包必须通过pip等工具下载
  • 提供更专业的功能

2. 流行的第三方包

常见包介绍

包名用途特点
FlaskWeb框架轻量级、灵活
NumPy数值计算多维数组、科学计算
Pandas数据分析DataFrame、数据处理
RequestsHTTP请求简单易用的网络库

安装方式

pipinstallflask pipinstallnumpy pipinstallpandas pipinstallrequests

3. 文档资源

每个包都有自己的文档

  • Flask: https://flask.palletsprojects.com/
  • NumPy: https://numpy.org/doc/
  • Pandas: https://pandas.pydata.org/docs/
  • Requests: https://requests.readthedocs.io/

七、⚠️ pip安全警告

真实案例:2018年恶意包事件

事件经过

  1. 恶意包上传:名为"acqusition"的包被上传到PyPI
  2. 模仿知名包:模仿知名包"acquisition"(拼写相似)
  3. 恶意代码:包含收集用户SSH和GPG密钥的代码
  4. 远程传输:将密钥发送到远程服务器
  5. 事后处理:包被移除,但警示了安全重要性

安全建议

安装前检查

# ❌ 危险:拼写错误可能安装恶意包pipinstallrequets# 注意:拼写错误!# ✓ 正确:仔细检查包名pipinstallrequests

最佳实践

  1. 仔细检查包名:注意拼写
  2. 验证包来源:查看官方文档
  3. 检查下载量:流行包通常有大量下载
  4. 查看维护情况:检查最后更新时间
  5. 阅读文档:了解包的功能
  6. 查看GitHub:查看源代码和issue

安全检查清单

□ 包名拼写正确 □ 来自官方源(PyPI) □ 有官方文档 □ 下载量合理 □ 近期有维护 □ 社区活跃

八、课程总结

Lambda与Map速查

Lambda语法

lambda参数:表达式# 示例square=lambdax:x**2add=lambdax,y:x+y

Map用法

map(函数,可迭代对象)# 示例list(map(lambdax:x**2,[1,2,3]))# => [1, 4, 9]

标准库分类速查

数据结构

  • collections: Counter, defaultdict, deque, namedtuple

函数工具

  • functools: lru_cache, partial, reduce

迭代工具

  • itertools: count, cycle, chain, combinations, permutations

文本处理

  • re: 正则表达式

调试工具

  • pdb: Python调试器

序列化

  • pickle: 对象序列化

常用标准库导入模板

# 数据处理fromcollectionsimportCounter,defaultdict,dequefromfunctoolsimportlru_cache,partialfromitertoolsimportchain,combinations# 文本处理importre# 调试importpdb# 序列化importpickle

关键要点

  1. 标准库的价值

    • 无需安装,开箱即用
    • 经过充分测试
    • 性能优化良好
  2. 选择合适的工具

    • 数据计数 → Counter
    • 函数缓存 → lru_cache
    • 正则匹配 → re
    • 调试 → pdb
  3. 第三方包

    • 提供专业功能
    • 需要pip安装
    • 注意安全性
  4. 最佳实践

    • 优先使用标准库
    • 需要时才安装第三方包
    • 仔细验证包的可信度

学习资源

官方文档

  • Python标准库:https://docs.python.org/3/library/
  • PyPI:https://pypi.org/

推荐阅读

  • Python Module of the Week (PyMOTW)
  • Real Python标准库教程
  • 各包的官方文档

实践建议

  1. 浏览标准库文档:了解有哪些工具可用
  2. 动手实践:在小项目中使用这些库
  3. 阅读源码:理解实现原理
  4. 关注安全:特别是使用pickle和第三方包时
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/23 6:24:12

2026年年初想转行网络安全,可以先看看过来人的建议

在当前就业形势下&#xff0c;不少朋友面临转行的困境。网络安全作为一个热门领域&#xff0c;自然也吸引了许多人的目光。本文将就转行网络安全这一话题&#xff0c;提供一些切实可行的建议。 网络安全行业概况 网络安全涵盖了从基础的脚本编写到高级的漏洞研究等多个层面。该…

作者头像 李华
网站建设 2026/3/20 17:21:03

光刻胶用抗氧化剂4,4-亚丁基-双(6-叔丁基间甲酚)BBM

4,4-亚丁基双(6-叔丁基间甲酚)1 化学特性与功能作用1.1 基本特性4,4’-亚丁基-双&#xff08;6-叔丁基间甲酚&#xff09;&#xff08;简称BBM&#xff09;是一种高效酚类抗氧化剂&#xff0c;其化学名称为4,4-Butylidenebis(6-tert-butyl-m-cresol)&#xff0c;分子式为C₂₆H…

作者头像 李华
网站建设 2026/3/20 5:45:43

高效协作:工程团队与LLM共建可维护代码的标准化流程

在与LLM进行大量协作编程之后&#xff0c;我将坚持一种中等层次的工作流程&#xff0c;在完全自主编写代码和纯粹氛围式编程之间位于第38百分位。以下方法帮助我为长期项目产生高质量代码&#xff1a; • 学习新工具和架构&#xff1a;如果你计划长期使用这些工具&#xff0c;在…

作者头像 李华
网站建设 2026/3/24 14:19:17

必看收藏!有手就行!50分钟教会你用LoRA微调打造专业会议语音助手

文章详细介绍了使用LoRA微调技术对Qwen2.5-0.5B-Instruct模型进行微调&#xff0c;使其成为会议语音助手的完整流程。从环境配置、模型下载、数据准备到代码实现和测试验证&#xff0c;展示了即使在普通笔记本上也能完成微调训练。微调可增强模型特定领域的能力&#xff0c;减少…

作者头像 李华
网站建设 2026/3/23 20:09:52

深度学习框架EL2021数据集对光伏电池异常缺陷检测方法进行基准测试数据集YOLOV8模型如何训练红外光伏缺陷检测数据集 内部缺陷和异构背景的近红外图像

太阳能 光伏电池缺陷异常检测数据集PVELAD 河北工业大学、北京航空航天大学联合发布的——PVEL-AD 数据集又叫做EL2021数据集是用于对光伏电池异常缺陷检测方法进行基准测试的数据集。PVEL-AD包含 36,543 张具有各种内部缺陷和异构背景的近红外图像&#xff0c;其中包含1类无异…

作者头像 李华
网站建设 2026/3/26 15:58:23

基于Java的加油站销售积分管理系统的设计与实应用和研究

文章目录摘要项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着加油站行业竞争的加剧&#xff0c;提升客户忠诚度成为企业发展的关键。基于Java的加油站…

作者头像 李华