Python 的标准库,说白了就是 Python 官方替你准备好的那一套工具集——安装完 Python 解释器,它们就已经躺在你电脑里了,无需额外下载,直接 import 就能用。对初学者来说,这可能是最有价值的“隐形财富”,因为它覆盖了日常开发中绝大多数基础需求。
1. 标准库
1.1 认识标准库
标准库是一组随 Python 一起安装的模块,由 Python 官方维护。它们的导入方式很简单:
import math import json from pathlib import Path
1. 标准库能做什么
标准库覆盖了大量常见任务,来看几个例子:
# 数学计算
import math
print(math.sqrt(16))
# 随机数
import random
print(random.randint(1, 10))
# 日期时间
from datetime import datetime
print(datetime.now())
# JSON 数据
import json
data = json.loads('{"name": "Tom"}')
print(data["name"])
# 文件路径
from pathlib import Path
print(Path.cwd())
2. 模块、包和函数
这几个概念可以用一个简单的类比来理解:
- 模块:一个 Python 文件,比如
math.py - 包:包含多个模块的目录,比如
urllib包下面有request、parse等模块 - 函数或类:模块中提供的具体功能,比如
math.sqrt
常见的导入方式有两种:
import math print(math.sqrt(9))
from math import sqrt print(sqrt(9))
通常推荐第一种,因为调用时能一眼看出函数来自哪个模块,可读性更好。
3. 标准库与第三方库的区别
| 类型 | 示例 | 是否需要安装 |
|---|---|---|
| 内置功能 | print、len、list | 不需要导入 |
| 标准库 | json、pathlib、datetime | 不需要安装 |
| 第三方库 | requests、numpy、pandas | 通常需要 pip install |
举个例子:
import json # 标准库,直接导入 import requests # 第三方库,通常需要先安装
4. 初学者优先认识这些模块
标准库有上百个模块,不需要一口气全记住。但下面这些是高频使用的,建议先混个脸熟:
pathlib:文件和目录操作datetime:日期与时间json:JSON 数据解析random:随机数生成math:数学运算re:正则表达式collections:常用数据结构(如 deque、Counter)itertools:迭代工具os、sys:操作系统和 Python 运行环境logging:日志记录
5. 查看模块提供了什么
拿到一个模块,想知道它里面有什么?直接用 dir() 和 help():
import math print(dir(math)) # 列出模块中所有名称 help(math.sqrt) # 查看具体函数的帮助文档
也可以查看模块的文档字符串:
print(math.__doc__)
学习标准库不需要一次全部记住。重点是知道“标准库大概能解决哪些问题”,实际编程时再查对应模块。官方文档是最终的参考宝典。
1.2 使用 import 导入模块
用 import 可以导入标准库的一个模块:
import [模块名]
所谓“模块”,其实就是一个单独的 .py 文件。使用 import 语句可以把这个外部的 .py 文件导入到当前文件中,并执行其中的代码。模块需要先导入,才能使用其中的函数、类或变量。
1. 导入整个模块
import math result = math.sqrt(16) print(result) # 4.0
导入后,通过 模块名.功能名 来调用模块中的功能。
2. 一次导入多个模块
import math import random import datetime
虽然也可以写成 import math, random,但通常推荐每个模块单独写一行,更清晰。
3. 给模块设置别名
使用 as 可以缩短模块名:
import datetime as dt now = dt.datetime.now() print(now)
很多第三方库也习惯用别名,比如 numpy 常被简写为 np,pandas 简写为 pd:
import numpy as np import pandas as pd
4. 从模块中导入指定功能
from math import sqrt result = sqrt(25) print(result) # 5.0
此时不需要写 math.sqrt(),可以直接使用 sqrt()。也可以导入多个功能:
from math import sqrt, pi print(sqrt(9)) print(pi)
5. 不建议使用通配符导入
from math import *
这种写法会导入模块中的大量名称,容易造成命名冲突,也难以判断某个函数来自哪里。更推荐:
import math
或者:
from math import sqrt
6. 导入自己编写的模块
假设有一个文件 tools.py:
def add(a, b):
return a + b
在同一目录的另一个 Python 文件中可以这样导入:
import tools result = tools.add(3, 5) print(result) # 8
也可以只导入函数:
from tools import add print(add(3, 5))
通常最推荐的写法还是 import 模块名,因为调用时会明确显示功能来自哪个模块,可读性更好。
1.3 代码示例:日期计算
输入任意两个日期,计算它们之间相隔多少天。这个需求在实际开发中很常见,比如计算合同到期时间、项目工期等。用标准库的 datetime 模块几行代码就能搞定:
- 使用
import datetime导入模块 - 用
datetime.datetime(year, month, day)构造两个日期对象 - 两个日期对象直接相减,得到差值
import datetime date1 = datetime.datetime(2016, 2, 14) date2 = datetime.datetime(2026, 7, 18) print(date2 - date1)
关于 datetime 的更多操作,参考官方文档即可。
1.4 代码示例:字符串操作
1.4.1 字符串中的单词反转

思路很简单:先用 split() 按空格切分字符串得到单词列表,然后反转列表,最后用 join() 拼接回去。注意 split() 默认会处理连续空格和首尾空格,正好符合要求。
class Solution(object):
def reverseMessage(self, message):
tokens = message.split()
tokens.reverse()
return ' '.join(tokens)
1.4.2 旋转字符串

判断一个字符串能否通过旋转得到另一个字符串,有个经典技巧:如果长度相等,且 goal 是 s + s 的子串,那么就能旋转得到。因为 s + s 包含了所有旋转后的可能结果。
class Solution(object):
def rotateString(self, s, goal):
return len(s) == len(goal) and goal in s + s
1.4.3 统计是给定字符串前缀的字符串数目

遍历 words 列表,对每个单词用 startswith() 方法判断它是不是 s 的前缀。Python 的字符串方法非常直观,代码写出来几乎就是自然语言。
class Solution(object):
def countPrefixes(self, words, s):
res = 0
for word in words:
if s.startswith(word):
res += 1
return res
1.5 代码示例:文件查找工具
指定一个搜索路径和一个关键词,找出该路径下所有文件名中包含关键词的文件。这个需求用 os.walk 来实现最方便——它会递归遍历目录树,返回当前路径、子目录列表和文件名列表。
import os
inputPath = input('请输入待搜索路径: ')
pattern = input('请输入待搜索关键词: ')
for dirpath, dirnames, filenames in os.walk(inputPath):
for f in filenames:
if pattern in f:
print(f'{dirpath}/{f}')
关于 os 模块的更多操作,可以参考官方文档。
2. 第三方库
2.1 认识第三方库
标准库之外,还有成千上万个由社区开发者贡献的第三方库。它们通常解决特定领域的问题,比如网络请求、数据分析、图像处理等。使用前需要先安装,然后通过 import 导入。
import requests import numpy import pandas
这些库默认不会随 Python 安装,需要使用 pip 安装。
2.2 使用 pip 安装第三方库
pip 是 Python 内置的包管理器,类似于手机上的应用商店。在终端或命令行中执行:
pip install requests
部分环境需要写成:
python -m pip install requests
安装完成后,就可以在代码中导入了:
import requests
1. 简单示例
使用 requests 获取网页内容:
import requests
response = requests.get("https://example.com")
print(response.status_code)
使用 numpy 创建数组:
import numpy as np numbers = np.array([1, 2, 3, 4]) print(numbers)
2. 常见第三方库
| 用途 | 第三方库 |
|---|---|
| 网络请求 | requests、httpx |
| 数据分析 | pandas |
| 数值计算 | numpy |
| 数据可视化 | matplotlib |
| 网页开发 | flask、django、fastapi |
| 爬虫 | beautifulsoup4、scrapy |
| 机器学习 | scikit-learn |
| 深度学习 | pytorch、tensorflow |
| Excel 处理 | openpyxl |
| 图像处理 | pillow、opencv-python |
3. 标准库和第三方库的区别
import math # 标准库,不需要额外安装 import requests # 第三方库,通常需要先安装
| 类型 | 示例 | 是否需要安装 |
|---|---|---|
| Python 内置功能 | print、len | 不需要 |
| 标准库 | math、json、random | 不需要 |
| 第三方库 | requests、numpy、pandas | 通常需要 |
4. 查看已安装的第三方库
pip list
查看某个库的信息:
pip show requests
卸载第三方库:
pip uninstall requests
升级第三方库:
pip install --upgrade requests
核心流程可以总结为:查找库 → pip 安装 → import 导入 → 调用功能。
2.3 代码示例:生成二维码
1. 通过搜索引擎,确定使用哪个库

搜索“Python 生成二维码”,很快就能找到 qrcode 这个库。
2. 查看 qrcode 文档

点击进入 qrcode 的详情页,文档开头会说明如何安装。

页面中央描述了使用方法。

3. 使用 pip 安装
pip install qrcode

4. 编写代码
import qrcode
img = qrcode.make('hello world')
img.sa ve('qrcode.png')
运行后,当前目录下会生成一张二维码图片。用微信或其他工具扫码,就能看到“hello world”。所谓二维码,本质上就是用黑白点阵表示一个字符串。日常使用的二维码内部通常是一个 URL,扫码后自动跳转到对应地址。
2.4 代码示例:操作 Excel
读取 Excel 文件可以用 xlrd 模块,修改可以用 xlwt。这里以 xlrd 为例,演示基本操作。
假设有这样一个 Excel 表格:

需求:求 101 班同学的平均分。
1. 安装 xlrd(注意指定版本,因为最新版删除了对 xlsx 的支持):
pip install xlrd==1.2.0
2. 编写代码:
import xlrd
# 1. 打开 xlsx 文件
xlsx = xlrd.open_workbook('文件地址链接')
# 2. 获取 0 号标签页(当前只有一个标签页)
table = xlsx.sheet_by_index(0)
# 3. 获取总行数
nrows = table.nrows
# 4. 遍历数据,统计 101 班的总分和人数
count = 0
total = 0
for i in range(1, nrows):
# 使用 cell_value(row, col) 获取指定坐标单元格的值
classId = table.cell_value(i, 1)
if classId == 101:
total += table.cell_value(i, 2)
count += 1
print(f'平均分: {total / count}')
2.5 代码示例:“程序员鼓励师”
监听键盘按键,每按 20 下就自动播放一段音频,给自己打打气。这个创意来自一位程序员的自我调侃,实现起来也不复杂。
1. 安装第三方依赖:
pip install pynput==1.6.8 pip install playsound==1.2.2
2. 准备一个音频文件(比如 ding.mp3),放到和 py 代码同级的目录。
3. 编写代码:
from pynput import keyboard
from playsound import playsound
count = 0
def on_release(key):
print(key)
global count
count += 1
if count % 10 == 0:
playsound('ding.mp3')
listener = keyboard.Listener(on_release=on_release)
listener.start()
listener.join()
运行程序,每按 10 次键就会播放一次音频。不过你会发现播放音频时按键会卡顿,这是因为 playsound 是阻塞的。可以用多线程解决:
from pynput import keyboard
from playsound import playsound
from threading import Thread
count = 0
def on_release(key):
print(key)
global count
count += 1
if count % 10 == 0:
t = Thread(target=playsound, args=('ding.mp3',))
t.start()
listener = keyboard.Listener(on_release=on_release)
listener.start()
listener.join()
多线程让音频播放和键盘监听并行执行,体验就流畅多了。
3. 综合案例:学生管理系统
3.1 需求说明
实现一个命令行版本的学生管理系统,功能包括:
- 新增学生
- 显示所有学生
- 根据名字查找学生
- 删除学生
- 存档到文件
这是一个经典的练手项目,能综合运用前面学到的函数、列表、字典、文件操作等知识。
3.2 创建入口函数
使用一个全局列表 students 存储所有学生信息。通过 menu() 函数与用户交互,然后调用 insert()、show()、find()、delete() 等自定义函数完成具体操作。
# 使用列表表示所有的学生
students = []
def main():
"""
程序的入口函数
"""
print('+--------------------------+')
print('| 欢迎来到学生管理系统! |')
print('+--------------------------+')
while True:
choice = menu()
if choice == 0:
sys.exit()
if choice == 1:
insert()
elif choice == 2:
show()
elif choice == 3:
find()
elif choice == 4:
delete()
else:
print('您的输入有误! 请重新输入!')
main()
3.3 实现菜单函数
def menu():
"""
显示程序菜单
"""
print(" 1. 新增学生信息")
print(" 2. 显示所有同学信息")
print(" 3. 根据名字查找学生信息")
print(" 4. 删除学生信息")
print(" 0. 退出程序")
choice = input(" 请输入您的选择: ")
return int(choice)
3.4 实现增删查操作
1. 新增学生
def insert():
print("[新增学生] 开始!")
studentId = input("请输入学生的学号: ")
name = input("请输入学生的姓名: ")
gender = input("请输入学生的性别: ")
if gender not in ('男', '女'):
print("性别不符合要求! 新增学生失败!")
return
className = input("请输入学生的班级: ")
# 使用一个字典表示学生信息
student = {
'studentId': studentId,
'name': name,
'gender': gender,
'className': className
}
# 把字典添加到学生列表中
global students
students.append(student)
print("[新增学生] 完毕!")
2. 显示学生
def show():
print("[显示学生] 开始!")
for s in students:
print(f"[{s['studentId']}]\t{s['name']}\t{s['gender']}\t{s['className']}")
print(f"[显示学生] 完毕! 共显示了 {len(students)} 条记录!")
3. 查找学生
def find():
print("[查找学生] 开始!")
name = input("请输入要查找的同学姓名: ")
count = 0
for s in students:
if name == s['name']:
print(f"[{s['studentId']}]\t{s['name']}\t{s['gender']}\t{s['className']}")
count += 1
print(f"[查找学生] 完毕! 共查找到 {count} 条记录!")
4. 删除学生
def delete():
print("[删除学生] 开始!")
studentId = input("请输入要删除的同学学号: ")
count = 0
for s in students:
if studentId == s['studentId']:
print(f"删除 {s['name']} 同学的信息!")
students.remove(s)
count += 1
print(f"[删除学生] 完毕! 共删除 {count} 条记录!")
3.5 加入存档读档
1. 约定存档格式
存档文件约定为 record.txt,以行文本方式保存学生信息,格式如下:
学号\t名字\t性别\t班级 学号\t名字\t性别\t班级 学号\t名字\t性别\t班级
每个同学占一行,信息之间用制表符 \t 分隔。
2. 实现存档函数
def sa ve():
"""
存档函数
"""
with open('record.txt', 'w') as f:
for s in students:
f.write(f"{s['studentId']}\t{s['name']}\t{s['gender']}\t{s['className']}\n")
print(f"[存档成功] 共存储了 {len(students)} 条记录!")
在 insert() 和 delete() 末尾调用 sa ve() 进行存档。
# 执行存档 sa ve()
3. 实现读档函数
def load():
"""
读档函数
"""
# 如果存档文件不存在,则跳过读档环节
if not os.path.exists('record.txt'):
return
# 先清空全局变量里的数据
global students
students = []
with open('record.txt', 'r') as f:
for line in f:
line = line.strip()
tokens = line.split('\t')
if len(tokens) < 4:
print(f"文件格式有误! line={line}")
continue
student = {
'studentId': tokens[0],
'name': tokens[1],
'gender': tokens[2],
'className': tokens[3]
}
students.append(student)
print(f"[读档成功] 共读取了 {len(students)} 条记录!")
在 main() 函数开头调用 load() 加载存档。
load()
3.6 打包成 exe 程序发布
目前这个管理系统只能在安装了 Python 环境的机器上运行。如果想部署到其他没有 Python 的电脑上,可以用 pyinstaller 打包成 exe 文件。
1. 安装 pyinstaller
pip install pyinstaller
2. 打包程序(-F 表示打包成单个 exe 文件)
pyinstaller -F 学生管理系统.py
注意:如果提示找不到 pyinstaller 命令,重启一下 PyCharm 或终端。稍等片刻,打包完成后在 dist 目录下就能找到 学生管理系统.exe。这个文件可以直接拷贝到其他 Windows 电脑上运行,无需安装 Python。
4. 后续扩展
学完这些基础,如果还想继续深入,下面几本书或资源值得一看:
- Python3 Cookbook:Python 经典进阶书籍,针对各种典型场景提供了解决方案,非常适合有基础后翻阅。
- awesome-python:GitHub 上的一个项目,整理了 Python 各种实用库,按领域分类,是找库的利器。
- 500 Lines or Less:用简短代码(500 行以内)实现一些有趣的应用,可以帮你理解大型项目的设计思路。
编程之路,动手实践是最重要的。把本文中的代码亲手敲一遍,遇到问题查文档、搜资料,慢慢地就能建立起自己的编程直觉。
