【Python】使用库 -- 详解
库就是别人已经写好了的代码,可以让我们直接拿来用。
一个编程语言能不能流行起来,一方面取决于语法是否简单方便容易学习,一方面取决于生态是否完备。所谓的 “生态” 指的就是语言是否有足够丰富的库,来应对各种各样的场景。在实际开发中,也并非所有的代码都自己手写,而是要充分利用现成的库,简化开发过程。
按照库的来源,可以大致分成两大类:
- 标准库:Python 自带的库。只要安装了 Python 就可以直接使用。
- 第三方库:其他人实现的库。要想使用,需要额外安装。
我们自己也可以实现 “第三方库” 发布出去,交给别人来使用。
一、标准库
1、认识标准库
Python 自身内置了非常丰富的库。
在 Python 官方文档上可以看到这些库的内容:
The Python Standard Library — Python 3.10.13 documentation
- 内置函数(如 print,input 等)
- 内置类型(针对 int,str,bool,list,dict 等类型内置的操作)
- 文本处理
- 时间日期
- 数学计算
- 文件目录
- 数据存储(操作数据库,数据序列化等)
- 加密解密
- 操作系统相关
- 并发编程相关(多进程,多线程,协程,异步等)
- 网络编程相关
- 多媒体相关(音频处理,视频处理等)
- 图形化界面相关
- .... ...
不需要把这些库的内容都背下来,只要大概知道里面有什么,需要用的时候能够找到即可。
2、使用 import 导入模块
使用 import 可以导入标准库的一个模块。
import [模块名]
所谓 “模块”,其实就是一个单独的 .py 文件。
使用 import 语句可以把这个外部的 .py 文件导入到当前 .py 文件中,并执行其中的代码。
3、日期计算(代码示例)
输入任意的两个日期,计算两个日期之间隔了多少天。
- 使用 import 语句导入标准库的 datetime 模块
- 使用 datetime.datetime 构造两个日期,参数使用 “年,月,日” 这样的格式。
- 两个日期对象相减,即可得到日期的差值。
关于 datetime 的更多操作,可以参考官方文档:
datetime — Basic date and time types — Python 3.12.4 documentation
4、字符串操作(代码示例)
字符串是 Python 的内置类型,字符串的很多方法不需要导入额外的模块,即可直接使用。
(1)剑指offer 58 —— 翻转单词顺序
对应题目链接:151. 反转字符串中的单词 - 力扣(LeetCode)
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串 "I am a student. ",则输出 "student. a am I"。
- 使用 str 的 split 方法进行字符串切分,指定空格为分隔符,返回结果是一个列表。
- 使用列表的 reverse 方法进行逆序。
- 使用 str 的 join 方法进行字符串拼接,把列表中的内容进行合并。
def reverseWords(s):tokens = s.split()tokens.reverse()return ' '.join(tokens)print(reverseWords('I am a student.'))
(2)leetcode 796 —— 旋转字符串
对应题目链接:796. 旋转字符串 - 力扣(LeetCode)
给定两个字符串,s 和 goal。如果在若干次旋转操作之后,s 能变成 goal,那么返回 true。
s 的旋转操作就是将 s 最左边的字符移动到最右边。例如,若 s = 'abcde',再旋转一次之后结果就是 'bcdea' 。
- 使用 len 求字符串的长度。如果长度不相同,则一定不能旋转得到。
- 将 s 和自己进行拼接,然后直接使用 in 方法来判定 goal 是否是 s + s 的子串。
def rotateString(s, goal):return len(s) == len(goal) and goal in s + sprint(rotateString('abcde', 'cdeab'))
(3)leetcode 2255 —— 统计是给定字符串前缀的字符串数目
对应题目链接:2255. 统计是给定字符串前缀的字符串数目 - 力扣(LeetCode)
给你一个字符串数组 words 和一个字符串 s,其中 words[i] 和 s 只包含小写英文字母。请你返回 words 中是字符串 s 前缀 的 字符串数目 。
一个字符串的 前缀 是出现在字符串开头的子字符串。子字符串 是一个字符串中的连续一段字符序列。
- 依次遍历 words 中的字符串。
- 直接使用字符串的 startswith 方法即可判定当前字符串是否是 s 的前缀。
def countPrefixes(words, s):res = 0 # 符合要求字符串个数for word in words:if s.startswith(word):res += 1return resprint(countPrefixes(["a","b","c","ab","bc","abc"], "abc"))
关于字符串的更多操作,参考官方文档:
Built-in Types — Python 3.12.4 documentation
(4)文件查找工具(代码示例)
指定一个待搜索路径,同时指定一个待搜索的关键字。
在待搜索路径中查找是否文件名中包含这个关键字。
-
使用 os.walk 即可实现目录的递归遍历。
-
os.walk 返回一个三元组,分别是当前路径,当前路径下包含的目录名(多个),当前路径下包含的文件名(多个)。
os.walk 每次调用都能自动的去针对子目录进行递归的操作,只需要使用上述循环就可以把所有的路径都获取出来。
关于 os 模块的更多操作,参考官方文档:
os — Miscellaneous operating system interfaces — Python 3.12.4 documentation
二、第三方库
1、认识第三方库
第三方库就是别人已经实现好了的库,我们可以拿过来直接使用。
虽然标准库已经很强大了,但是终究是有限的。而第三方库可以视为是集合了全世界 Python 程序员的智慧,可以说是几乎无穷无尽。
当我们遇到一个需求场景的时候,如何知道、该使用哪个第三方库呢?
就需要用到下面几个网站了:
当我们确定了该使用哪个第三方库之后,就可以使用 pip 来安装第三方库了。
2、使用 pip
pip 是 Python 内置的包管理器,所谓包管理器就类似于我们平时使用的手机 app 应用商店一样。
第三方库有很多,是不同的人、不同的组织实现的。为了方便大家整理,Python 官方提供了一个网站 PyPI https://pypi.org/ 来收集第三方库。其他大佬写好的第三方库也会申请上传到 PyPI 上,这个时候就可以方便的使用 pip 工具来下载 PyPI 上的库了。
pip 在我们安装 Python 的时候就已经内置了,无需额外安装。
pip 是一个可执行程序,就在 Python 的安装目录中。打开 cmd,直接输入:pip。如果显示以下帮助信息,说明 pip 已经准备就绪。
如果最开始按照要求在安装 Python 的时候勾选了:
那么 pip 就是默认可用的。
如果提示:
'pip' 不是内部或外部命令,也不是可运行的程序或批处理文件。
则说明没有正确的把 pip 加入到 PATH 中,可以手动把 pip 所在的路径加入到 PATH 环境变量中。可参考:windows环境下面配置pip环境变量 - 简书 (jianshu.com)
或者卸载重装 Python,记得勾上上述选项,也许是更简单的办法。
使用命令:pip install [库名] 即可安装第三方库。
注意:这个命令需要从网络上下载,使用时要保证网络畅通。安装成功后,即可使用 import 导入相关模块,即可进行使用。
如果使用 pip 安装完第三方库之后,在 PyCharm 中仍然提示找不到对应的模块,则检查 Settings -> Project -> Python Interpreter,看当前 Python 解释器设置的是否正确。(如果一个机器上安装了多个版本的 Python,容易出现这种情况)
3、生成二维码(代码示例)
所谓二维码本质上就是使用黑白点阵表示一个字符串。我们日常使用的二维码内部一般是一个 URL,扫码后会自动跳转到对应的地址,从而打开一个网页。可以把任意的字符串制作成一个二维码图片。
(1)通过搜索引擎,确定使用哪个库
得到情报,qrcode 这个库可以用来生成二维码。
(2)查看 qrcode 文档
在 PyPI 上搜索 qrcode:
点击则进入 qrcode 的详情页。
文档开头描述了如何安装 qrcode:
页面中央位置描述了 qrcode 库的使用方法:
(3)使用 pip 安装
在终端输入命令:pip install qrcode[pil]
注意 :pip 安装的时候可能会有警告,提示使用的 pip 版本太低。这个警告可以不用处理,不影响正常使用。
(4)编写代码
按照文档给出的示例,模仿一段代码:
运行完毕后得到结果如下:
使用微信或者其他工具扫码,即可看到二维码内容。
4、操作 Excel(代码示例)
读取 excel 可以使用 xlrd 模块,文档地址:xlrd — xlrd 2.0.1 documentation
修改 excel 可以使用 xlwt 模块,文档地址:xlwt documentation — xlwt 1.3.0 documentation
此处以 xlrd 为例,演示 Excel 的基本操作。
需求有如下 Excel 表格 d:/test.xlsx
求 100 班的同学的平均分。
虽然 Excel 自身支持很强大的功能,也可以求和、求平均值。但是如果是稍微复杂的需求,操作起来可能就没那么方便了。
(1)安装 xlrd
pip install xlrd==1.2.0
注意 :此处要指定版本号安装. 如果不指定版本号, 则安装最新版. 最新版里删除了对 xlsx 格式文件的支持。
(2)编写代码
- 使用 open_workbook 方法打开一个 Excel 文件。
- 使用 xlsx.sheet_by_index(0) 获取到 0 号标签页。
- 使用 table.nrows 获取到表格的行数。
- 使用 table.cell_value(row, col) 获取到表格中 row,col 位置的元素值。
5、“程序员鼓励师”(代码示例)
监听键盘按键,每按键 20 下就自动播放一个音频,鼓励一下辛苦搬砖的每一个程序员。
(1)安装第三方依赖
pynput 用于监听键盘按键。(注意版本不要用最新)
playsound 用于播放音频。
pip install pynput==1.6.8
pip install playsound==1.2.2
(2)准备音频文件
此处准备了一个 ding.mp3 放到和 py 代码同级目录中:
(3)编写代码
使用 from import 的格式直接导入模块中的指定对象 / 函数。
使用 keyboard.Listener 监听键盘按键,其中 on_release 会在释放按键时被调用。
使用 listener.start 启动监听器. 为了防止程序直接退出, 使用 listener.join 让程序等待用户按键。
使用 count 计数,每隔 10 次,调用 playsound 播放音频文件。
(4)改进代码
上述代码在执行过程中,会感觉到播放音频会导致按键卡顿,可以使用多线程解决这个问题。
- 使用 threading.Thread 引入多线程类。
- 使用 Thread 的构造函数来构造一个线程。target 表示线程要执行的任务,args 表示 target 中要调用函数的参数。
- 使用 Thread.start() 启动线程。
6、学生管理系统(综合案例)
(1)需求说明
实现一个命令行版本的学生管理系统。
- 新增学生
- 显示学生
- 查找学生
- 删除学生
- 存档到文件
(2)创建入口函数
- 使用一个全局列表 students 表示所有学生信息。
- 使用 menu 函数和用户交互,这是一个自定义函数。
- 使用 insert,show,find,delete 这几个自定义函数完成增删查操作。
- 使用 sys.exit 实现程序退出。
(3)实现菜单函数
(4)实现增删查操作
A. 新增学生
B. 显示学生
C. 查找学生
D. 删除学生
(5)加入存档读档
A. 约定存档格式
将存档文件放到 d:/record.txt 文件中,并且以行文本的方式来保存学生信息,格式如下:
学号\t名字\t性别\t班级
学号\t名字\t性别\t班级
学号\t名字\t性别\t班级
- 每个同学占一行。
- 每个同学的信息之间使用 \t 制表符进行分隔。
B. 实现存档函数
在 insert 和 delete 末尾,调用 save 函数进行存档。
C. 实现读档函数
在 main 函数开头的地方,调用 load 加载存档:
(6)演示测试过程
(7)打包成 exe 程序发布
当前虽然已经实现了一个管理系统,但是 .py 的文件只能在安装了 Python 环境的机器上运行。为了能够更好的部署到其他主机上,可以借助 pyinstaller 来把 Python 程序打包成 exe 程序。
A. 安装 pyinstaller
pip install pyinstaller
B. 打包程序
- -F 表示打包成单个 exe(不带动态库)
pyinstaller -F 学生管理系统.py
打包完成之后:
此时就可以把这个程序拷贝给其他机器使用了,无需 Python 环境也可运行。
三、扩展
1、python cookbook
python 经典进阶书籍, 针对各种典型场景提供了一些解决方案。

2、awesome-python
Python 的一些非常实用的程序库:awesome-python: awesome-python 的中文版 (gitee.com)
3、500 Lines or Less
使用简短的 Python 代码来实现一些有意思的程序:
aosabook/500lines: 500 Lines or Less (github.com)
相关文章:

【Python】使用库 -- 详解
库就是别人已经写好了的代码,可以让我们直接拿来用。 一个编程语言能不能流行起来,一方面取决于语法是否简单方便容易学习,一方面取决于生态是否完备。所谓的 “生态” 指的就是语言是否有足够丰富的库,来应对各种各样的场景。在…...

Web3D:WebGL为什么在渲染性能上输给了WebGPU。
WebGL已经成为了web3D的标配,市面上有N多基于webGL的3D引擎,WebGPU作为挑战者,在渲染性能上确实改过webGL一头,由于起步较晚,想通过这个优势加持,赶上并超越webGL仍需时日。 贝格前端工场为大家分享一下这…...

SpringBoot面试高频总结01
1. 什么是SpringBoot? SpringBoot是一个基于Spring框架的快速开发框架,它采用约定大于配置,自动装配的方式,可以快速地创建独立的,生产级别的,基于Spring的应用程序。 相比于传统的Spring框架,S…...
Linux 工作队列(Workqueue):概念与实现
目录 一、工作队列的概念1.1 什么是工作队列1.2 为什么使用工作队列 二、工作队列的实现2.1 定义和初始化工作队列2.2 工作队列API 三、工作队列的应用3.1 延迟执行任务3.2 处理复杂的中断任务 四、工作队列的类型4.1 普通工作队列4.2 高优先级工作队列 五、总结 在Linux内核中…...
前端页面是如何禁止被查看源码、被下载,被爬取,以及破解方法
文章目录 1.了解禁止查看,爬取原理1.1.JS代码,屏蔽屏蔽键盘和鼠标右键1.2.查看源码时,通过JS控制浏览器窗口变化2.百度文库是如何防止抓包2.1.HTPPS2.2. 动态加载为什么看不到?如何查看动态加载的内容?3.禁止复制,如果解决3.1.禁止复制原理3.2.如何破解1.了解禁止查看,爬…...

51单片机嵌入式开发:14、STC89C52RC 之HX1838红外解码NEC+数码管+串口打印+LED显示
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 STC89C52RC 之HX1838红外解码NEC数码管串口打印LED显示 STC89C52RC 之HX1838红外解码NEC数码管串口打印LED显示1 概述2 硬件电路2.1 遥控器2.2 红外接收器电路2.3 STC89C52单…...
在不同环境中,Java应用程序和MySQL等是如何与Docker进行交互和操作的?
1. 本地开发环境 在本地开发环境中,可以使用Docker Compose来管理和运行Java应用程序容器和MySQL容器。通常,会创建一个docker-compose.yml文件,定义需要的服务及其配置。 以下是一个示例docker-compose.yml文件: version: 3 services:app…...

《DRL》P10-P15-损失函数-优化(梯度下降和误差的反向传播)
文章目录 损失函数交叉熵损失多类别分类任务概述真实标签的独热编码交叉熵损失函数 L p 范式 \mathcal{L}_{p}\text{ 范式} Lp 范式均方误差平均绝对误差 优化梯度下降和误差的反向传播 简介 本文介绍了神经网络中的损失函数及其优化方法。损失函数用于衡量模型预测值与真实值…...

Spring Boot项目的404是如何发生的
问题 在日常开发中,假如我们访问一个Sping容器中并不存在的路径,通常会返回404的报错,具体原因是什么呢? 结论 错误的访问会调用两次DispatcherServlet:第一次调用无法找到对应路径时,会给Response设置一个…...

<数据集>手势识别数据集<目标检测>
数据集格式:VOCYOLO格式 图片数量:2400张 标注数量(xml文件个数):2400 标注数量(txt文件个数):2400 标注类别数:5 标注类别名称:[fist, no_gesture, like, ok, palm] 序号类别名称图片数框数1fist597…...
【Vue3】选项式 API
【Vue3】选项式 API 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。…...

2、如何发行自己的数字代币(truffle智能合约项目实战)
2、如何发行自己的数字代币(truffle智能合约项目实战) 1-Atom IDE插件安装2-truffle tutorialtoken3-tutorialtoken源码框架分析4-安装openzeppelin代币框架(代币发布成功) 1-Atom IDE插件安装 正式介绍基于web的智能合约开发 推…...

百日筑基第二十三天-23种设计模式-创建型总汇
百日筑基第二十三天-23种设计模式-创建型总汇 前言 设计模式可以说是对于七大设计原则的实现。 总体来说设计模式分为三大类: 创建型模式,共五种:单例模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式。结构型模式,共…...

张量的基本使用
目录 1.张量的定义 2.张量的分类 3.张量的创建 3.1 根据已有数据创建张量 3.2 根据形状创建张量 3.3 创建指定类型的张量 1.张量的定义 张量(Tensor)是机器学习的基本构建模块,是以数字方式表示数据的形式。PyTorch就是将数据封装成张量…...
Oracle(14)什么是唯一键(Unique Key)?
唯一键(Unique Key)是数据库表中的一个或多个列,它们的值必须在整个表中唯一,但允许包含NULL值。唯一键的主要目的是确保表中每一行的数据在指定的列(或列组合)中是唯一的,以防止重复数据的出现…...

PostgreSQL的引号、数据类型转换和数据类型
一、单引号和双引号(重要): 1、在mysql没啥区别 2、在pgsql中,实际字符串用单引号,双引号相当于mysql的,用来包含关键字; -- 单引号,表示user_name的字符串实际值 insert into t_user(user_nam…...
Mad MAD Sum-Codeforces Round 960 (Div. 2)
题目在这里 大意: MAD函数返回出现次数 ≥ 2 \geq2 ≥2的最大整数 b i b_i bi M A D ( a [ 1 , 2 , . . . i ] ) MAD(a[1,2,...i]) MAD(a[1,2,...i]) 每次操作把 a i a_i ai进行上述操作,直到全变为0为止,对每次操作的数组进行求和,记…...
Flutter 插件之 package_info_plus
当使用Flutter开发应用时,通常需要获取应用程序的基本信息,例如包名、版本号和构建号。Flutter提供了一个名为 package_info_plus 的插件,它能方便地帮助我们获取这些信息。 1. 添加依赖 首先,需要在项目的 pubspec.yaml 文件中添加 package_info_plus 的依赖。打开 pubs…...

如何实现布隆过滤器?
1.布隆过滤器的场景 在Redis 缓存击穿(失效)、缓存穿透、缓存雪崩怎么解决?中我们说到可以使用布隆过滤器避免「缓存穿透」。 你会说我们只要记录了每个用户看过的历史记录,每次推荐的时候去查询数据库过滤存在的数据实现去重。 …...

运维团队如何高效监控容器化环境中的PID及其他关键指标
随着云计算和容器化技术的快速发展,越来越多的企业开始采用容器化技术来部署和管理应用程序。然而,容器化环境的复杂性和动态性给运维团队带来了前所未有的挑战。本文将从PID(进程标识符)监控入手,探讨运维团队如何高效…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...