【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和第三方包时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1119562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于JAVA的图书馆图书资源检索借阅系统应用和研究

文章目录图书馆图书资源检索借阅系统的研究背景系统功能与架构设计技术创新与优化应用价值与展望项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;图书馆图书资源…

系统安装及使用

文章目录1. Anaconda 安装安装Anaconda, 官网太慢&#xff0c;使用清华源下载&#xff0c;清华源地址如下&#xff1a;2. 修改下载源以及默认环境安装路径3. 安装python3.9新环境&#xff0c;并安装jupyter安装新环境的命令是conda create -n newpython python3.9注意&#xff…

探索AI智能体VertGrow的独特功能与核心优势

引言与背景在今天这个快速发展的数字时代&#xff0c;企业在销售和市场营销上面临着各种挑战与机遇。随着技术的进步&#xff0c;AI智能销售机器人逐渐成为提升销量和管理客户的重要助手。我们正在研究&#xff0c;像VertGrow AI销冠这样的一站式营销获客平台&#xff0c;是如何…

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

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

基于Java的奖学金评定评优系统的设计与实现应用和研究

文章目录 奖学金评定评优系统的设计与实现关键技术应用功能模块设计实际应用价值 项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 奖学金评定评优系统的设计与…

RAG与知识图谱结合:技术选型的关键考量

一个真实的失败案例 用户提问&#xff1a; ❝ 哪个部门通过加强内部合作、增设新岗位、组建新团队的方式&#xff0c;来进行重组改造&#xff1f; ❞ 这个问题看似合理&#xff0c;期望的答案应该是一个明确的机构名称&#xff08;如《纽约时报》、《卫报》&#xff09;。但使…

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

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

无人机高分辨率街景语义分割数据集 深度学习框架unet模型如何训练无人机这个无人机航拍街景语义分割数据集

无人机高分辨率街景语义分割数据集1无人机&#xff1a;DJI mavic3 数据类型&#xff1a;原始图片&#xff0c;语义分割标签 总内存大小&#xff1a;6.7G&#xff08;430张图片&#xff09; 图片分辨率&#xff1a;4K 采集高度&#xff1a;20&#xff5e;45m 采集角度&#xff1…

[精品]基于微信小程序的瑜伽体验课预约系统 UniApp

文章目录项目介绍项目实现效果图所需技术栈文件解析微信开发者工具HBuilderXuniappmysql数据库与主流编程语言登录的业务流程的顺序是&#xff1a;毕设制作流程系统性能核心代码系统测试详细视频演示源码获取项目介绍 在当今快节奏的社会生活中&#xff0c;人们对健康和身心放…

【珍藏】Deep Thinking RAG:让AI具备思考能力,解决传统RAG五大痛点,附完整代码

文章介绍Deep Thinking RAG架构&#xff0c;将RAG与Agent技术融合&#xff0c;通过LangGraph实现的循环推理机制&#xff0c;解决传统RAG五大瓶颈。系统包含规划代理、自适应检索监督者等组件&#xff0c;实现从"工具"到"智能体"的范式跃迁&#xff0c;能处…

复杂环境下检测无人机数据 集反无人机检测数据集反无人机(Anti-UAV)数据集的应用 深度学习YOLOV8模型训练多场景无人机检测数据集

多场景复杂环境下检测无人机数据集&#xff08;反无人机数据集&#xff09; 数据集面向反无人机&#xff08;Anti-UAV&#xff09;任务设计&#xff0c;收录了来自城市、山区、沿海与森林等多种典型环境的视频帧&#xff0c;涵盖多种气象与光照条件。面向可见光视频/图像的反…

【必藏】RAG技术揭秘:如何同时击败传统搜索和大模型?答案在这里!

RAG技术通过向量检索结合大模型生成能力&#xff0c;突破了传统搜索引擎依赖精确关键词和大模型知识库有限的局限。它实现语义匹配而非关键词检索&#xff0c;能实时获取最新信息&#xff0c;扩展知识覆盖面&#xff0c;减少错误并确保答案来源可追溯。这种技术结合了信息检索和…

[精品]基于微信小程序的云校园的设计与实现 UniApp

文章目录项目实现效果图所需技术栈文件解析微信开发者工具HBuilderXuniappmysql数据库与主流编程语言登录的业务流程的顺序是&#xff1a;毕设制作流程系统性能核心代码系统测试详细视频演示源码获取项目实现效果图 项目编号&#xff1a;084 所需技术栈 小程序框…

高斯分布的加权和 vs. 加权混合

这两个概念虽然都基于高斯分布&#xff0c;但代表着两种完全不同的数学操作和思维方式。简单来说&#xff0c;高斯分布的加权和产生的是一个新的高斯分布&#xff0c;而高斯分布的加权混合描述的是一个复杂的多模态分布。维度高斯分布的加权和高斯混合模型数学本质随机变量的线…

[精品]基于微信小程序的助眠小程序 UniApp

文章目录项目介绍项目实现效果图所需技术栈文件解析微信开发者工具HBuilderXuniappmysql数据库与主流编程语言登录的业务流程的顺序是&#xff1a;毕设制作流程系统性能核心代码系统测试详细视频演示源码获取项目介绍 当今社会已经步入了科学技术进步和经济社会快速发展的新时…

【收藏必备】Ollama+API+LLM封装:构建本地+云端混合AI工作流全攻略

本文详细介绍了如何使用Ollama实现本地大模型部署&#xff0c;并通过HTTP API将模型接入业务系统。同时提供了云端API调用方法&#xff0c;最后通过统一的LLM封装层实现本地云端混合架构。开发者可以据此构建自己的AI工作流&#xff0c;实现离线可用、数据安全、成本可控的智能…

传统电源模块测试行业中都有哪些比较通用的痛点?-纳米软件

在零代码开发平台ATECLOUD平台上线以来&#xff0c;有众多的企业与纳米软件达成了合作&#xff0c;以解决企业电源模块自动化测试的问题。在与我们合作的用户中&#xff0c;电源模块的生产研发企业对于测试的痛点各不相同&#xff0c;但经过我们统计在电源模块测试行业中的痛点…

基于Java Web的乡镇居民诊疗挂号信息系统的设计与实现应用和研究

文章目录乡镇居民诊疗挂号信息系统的设计与实现关键技术与创新点应用效果与社会价值项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;乡镇居民诊疗挂号信息系统的…

如何通过生产调度分析提升汽车制造效率与OEE?

在现代汽车制造业加速向智能化、柔性化与绿色化转型的背景下&#xff0c;生产调度分析已从传统的排产工具&#xff0c;演变为驱动整车制造效率跃升的核心决策中枢。面对多品种、小批量、快交付的市场需求&#xff0c;传统依赖人工经验与静态计划的调度方式难以应对复杂的产线协…