第 8 章 模块、标准库与第三方库
学习目标
- 掌握
import的三种写法 - 会用常用标准库:
math、random、datetime - 会用
pip安装第三方库,了解虚拟环境 - 能用
requests发起 HTTP 请求并解析返回的 JSON
8.1 import:引入模块
模块是一个包含 Python 代码的文件,把相关功能打包在一起。标准库是 Python 自带的模块集合。用 import 引入:
import math
print(math.sqrt(16))
print(math.ceil(3.2))
print(math.floor(3.8))输出:
4.0
4
3import math 之后,用 math.函数名 调用,名字前面必须带模块名。
三种常见写法:
import math # 写法一:引入整个模块
from math import sqrt, pi # 写法二:引入模块里的部分名字
import math as m # 写法三:起别名,之后用 m.xxxfrom math import sqrt, pi
print(sqrt(9))
print(pi)输出:
3.0
3.141592653589793写法二引入后可以直接用 sqrt(9),但要注意名字可能与其他代码冲突。本书建议:多数情况用写法一或写法二,别名写法用于名字特别长的情况。
8.2 常用标准库
math:数学函数与常量。
| 函数 | 作用 | 示例 | 结果 |
|---|---|---|---|
sqrt(x) | 平方根 | math.sqrt(16) | 4.0 |
ceil(x) | 向上取整 | math.ceil(3.2) | 4 |
floor(x) | 向下取整 | math.floor(3.8) | 3 |
pi | 圆周率常量 | math.pi | 3.141592653589793 |
random:生成随机数。注意示例前先调用 random.seed(1) 固定随机种子,这样每次运行结果相同,便于教材演示;实际程序通常不加 seed。
import random
random.seed(1)
print(random.randint(1, 100))
print(random.choice(["苹果", "香蕉", "橘子"]))输出(seed 固定为 1 时):
18
橘子常用函数:randint(a, b) 返回 a 到 b(含两端)的随机整数;choice(序列) 随机取一个元素;shuffle(列表) 原地打乱顺序。
datetime:日期与时间。
from datetime import date
d = date(2026, 8, 2)
print(d)
print(d.year, d.month, d.day)输出:
2026-08-02
2026 8 28.3 pip 与第三方库
第三方库是社区开发、通过包管理器 pip 安装的模块。安装命令:
$ pip install requests安装后即可像标准库一样使用。用 pip list 查看已安装的库,pip uninstall 库名 卸载。
requests 是发起 HTTP 请求最常用的第三方库。下面请求一个公开 API 并解析返回的 JSON(需要联网,输出取决于接口当时的返回):
import requests
resp = requests.get("https://api.open-meteo.com/v1/forecast?latitude=31.23&longitude=121.47¤t_weather=true")
data = resp.json()
print(data["current_weather"]["temperature"])resp.json() 把接口返回的 JSON 文本解析成 Python 的字典 / 列表。解析方法与第 6 章的字典操作完全一样,这一点在下面「动手实践」中单独练习,不依赖网络。
虚拟环境用 venv 创建,把某个项目的依赖隔离在独立目录里,避免不同项目之间相互污染:
$ python3 -m venv .venv
$ source .venv/bin/activate # Windows 用 .venv\Scripts\activate激活后,pip install 安装的库只属于当前虚拟环境;用 deactivate 退出。项目开始时创建虚拟环境、把依赖写入 requirements.txt(pip freeze > requirements.txt)是常见做法。
动手实践
任务一:随机点名器。 读入逗号分隔的名单,随机输出一个名字,并随机打乱后依次输出。
import random
names = input("请输入名单,用逗号分隔: ").split(",")
print(f"被点到的人:{random.choice(names)}")
random.shuffle(names)
print("抽签顺序:", names)任务二:JSON 解析(不联网)。 接口返回的结构通常像下面这个字典,练习用下标层层取出数据:
data = {
"name": "Shanghai",
"main": {"temp": 25.5},
"weather": [{"description": "多云"}],
}
print(data["name"])
print(data["main"]["temp"])
print(data["weather"][0]["description"])输出:
Shanghai
25.5
多云观察:第一层是字典(data["name"]),temp 在嵌套字典里(data["main"]["temp"]),description 在列表的第一个元素的字典里(data["weather"][0]["description"])。8.3 节的 requests 示例,本质就是「先请求得到这样的结构,再用下标解析」。
常见错误
| 错误写法 | 报错信息 | 原因 |
|---|---|---|
未安装就 import requests | ModuleNotFoundError: No module named 'requests' | 先用 pip install requests 安装 |
import math 后写 sqrt(16) | NameError: name 'sqrt' is not defined | 用 import math 引入后要写 math.sqrt |
random.randint(1, 100) 返回随机数但两次运行不同 | 不报错,结果是随机的 | 需要固定结果时先 random.seed(n) |
date(2026, 13, 2) | ValueError: month must be in 1..12 | 月份超出合法范围 |
网络不通时运行 requests.get(...) | requests.exceptions.ConnectionError 等 | 检查网络,或改用模拟数据练习 |
章末练习
基础
- 用
math计算:√100、ceil(9.1)、floor(9.9),输出结果。 - 用
random.randint(1, 6)模拟掷骰子,输出 10 次结果。 - 用
datetime创建日期2026, 1, 1,输出它和它的年份、月份、日。
提高
- 用
random.choice写一个「剪刀石头布」:程序随机出一个,用户输入一个,输出谁赢了。 - 写程序:生成一个 6 位随机数字验证码(每一位是 0~9 的随机整数),输出。提示:循环 6 次拼接字符串。
挑战
- 用
math写函数distance(x1, y1, x2, y2),返回两点间距离(√((x2-x1)²+(y2-y1)²)),验证distance(0, 0, 3, 4)等于 5.0。 - 解释下面的代码为什么结果与预期不同,并给出修正:python期望:模拟 10 次掷骰子,得到 10 个不同的结果。
import random dice = random.randint(1, 6) print(dice)
章末自测
每题选择一个最佳答案。本书不附答案:完成后交由老师或 AI 老师批改讲解。
import math后,调用平方根的正确写法是?- A.
sqrt(16) - B.
math.sqrt(16) - C.
import.sqrt(16) - D.
math(16)
- A.
from math import sqrt之后,可以直接写?- A.
math.sqrt(9) - B.
sqrt(9) - C.
math(9) - D.
import(9)
- A.
random.randint(1, 6)可能返回?- A.
0 - B.
6 - C.
7 - D.
6.0
- A.
- 安装第三方库的命令是?
- A.
pip install 库名 - B.
pip get 库名 - C.
install pip 库名 - D.
python 库名
- A.
- 没有安装
requests就import requests会?- A. 自动安装
- B. 报
ModuleNotFoundError - C. 报
NameError - D. 正常运行
math.ceil(3.2)的结果是?- A.
3 - B.
4 - C.
3.2 - D. 报错
- A.
resp.json()把 JSON 解析成?- A. 字符串
- B. 字典或列表
- C. 整数
- D. 文件
date(2026, 8, 2).year的结果是?- A.
2026 - B.
8 - C.
2 - D.
"2026-08-02"
- A.
- 创建虚拟环境的命令是?
- A.
python3 -m venv .venv - B.
pip venv - C.
python3 venv - D.
venv create
- A.
- 下面哪个不属于 Python 标准库? A.
mathB.randomC.datetimeD.requests
