| 数据类型 |
常用方法 (Method) |
简要说明与应用场景 |
字符串 str |
.strip() |
去除首尾空格(常用于处理用户输入) |
|
.split(sep) |
按指定分隔符分割成列表(处理CSV数据常用) |
|
.join(iter) |
将列表元素合并成字符串(.split的逆操作) |
|
.replace(old, new) |
替换字符串中的内容 |
|
.find(sub) |
查找子串位置(找不到返 -1) |
|
.upper() / .lower() |
大小写转换 |
列表 list |
.append(obj) |
在末尾添加一个元素 |
|
.pop(index) |
移除并返回指定位置的元素(默认最后一个) |
|
.remove(obj) |
移除列表中第一个匹配的元素 |
|
.sort() |
对列表进行永久排序 |
|
.clear() |
清空列表内所有元素,变为 [] |
元组 tuple |
.count(obj) |
统计某个元素出现的次数 |
|
.index(obj) |
查找元素第一次出现的索引位置 |
字典 dict |
.get(key, default) |
安全获取键值,若键不存在则返回默认值 |
|
.keys() / .values() |
获取所有键 / 获取所有值 |
|
.items() |
获取所有键值对(常用于遍历) |
|
.pop(key) |
删除指定键并返回其值 |
|
.clear() |
清空字典内所有键值对,变为 {} |
集合 set |
.add(obj) |
添加一个元素 |
|
.remove(obj) |
移除元素(若不存在会报错) |
|
.union() / ` |
` |
|
.intersection() / & |
取交集 |
|
.clear() |
清空集合内所有元素,变为 set() |
| 数据类型 |
是否有序 (Ordered) |
是否可变 (Mutable) |
定义符号 |
字符串 str |
✅ 有序 |
❌ 不可变 |
' ' |
列表 list |
✅ 有序 |
✅ 可变 |
[ ] |
元组 tuple |
✅ 有序 |
❌ 不可变 |
( ) |
字典 dict |
✅ 有序 |
✅ 可变 |
{k:v} |
集合 set |
❌ 无序 |
✅ 可变 |
{ } |
| 参数类型 |
代码语法示例 |
说明与教学重点 |
接收数据类型 |
| 位置参数 (Positional) |
def func(a, b): |
最基础的参数,调用时必须传,且顺序要对应。 |
变量本身 |
| 默认参数 (Default) |
def func(mode='r'): |
定义时赋值。调用时可不传(使用默认值),传了则覆盖。 |
变量本身 |
可变位置参数 (*args) |
def func(*args): |
允许传入任意数量的位置参数(0个或多个)。 即:没名字的参数都给它。 |
元组 tuple |
可变关键字参数 (**kwargs) |
def func(**kwargs): |
允许传入任意数量的关键字参数(带变量名的)。 即:有名字但没定义的参数都给它。 |
字典 dict |
| 特性 |
*args |
**kwargs |
| 全称含义 |
Arguments (参数) |
Keyword Arguments (关键字参数) |
| 符号作用 |
* (单星号) 负责打包位置参数 |
** (双星号) 负责打包键值对参数 |
| 调用示例 |
func(1, 2, 3, 4) |
func(name="Tom", age=18) |
| 函数内数据形态 |
变成 元组 (Tuple) (1, 2, 3, 4) |
变成 字典 (Dict) {'name': 'Tom', 'age': 18} |
| 变量命名 |
习惯写 args,但其实写 *names 也可以 |
习惯写 kwargs,但其实写 **info 也可以 |
| 教学口诀 |
单星管排队(位置),转成元组 |
双星管点名(键值),转成字典 |
| 场景 |
代码示例 |
效果说明 |
列表/元组解包 * |
nums = [10, 20] func(*nums) |
等同于 func(10, 20) 将列表拆开,对应填入位置参数。 |
字典解包 ** |
conf = {'width': 800, 'height': 600} func(**conf) |
等同于 func(width=800, height=600) 将字典拆开,对应填入关键字参数。 |
| 操作环节 |
关键代码/参数 |
说明与教学重点 |
试卷考点关联 |
| 打开文件 |
open(file, mode, encoding) |
核心函数。建议始终指定 encoding='utf-8' 以防中文乱码。 |
1 |
| 文件模式 |
'r' (Read) |
只读。文件不存在会报错 (FileNotFoundError)。 |
|
|
'w' (Write) |
写入。文件存在则清空覆盖,不存在则创建。 |
|
|
'a' (Append) |
追加。在文件末尾写入,不覆盖原内容。 |
|
|
'b' (Binary) |
二进制模式。用于图片、音频(如 'rb', 'wb')。 |
|
| 读取内容 |
f.read() |
读取全部内容(慎用于大文件)。 |
|
|
f.readline() |
每次只读取一行。 |
|
|
f.readlines() |
读取所有行并返回一个列表。 |
|
| 关闭文件 |
f.close() |
必须关闭以释放资源。但推荐用 with 语句代替。 |
22 |
| 上下文管理 |
with open(...) as f: |
最推荐写法。代码块结束自动关闭文件,无需手动写 f.close()。 |
3333 |
| 功能分类 |
函数/方法 |
作用与实战应用 |
试卷考点关联 |
| 路径拼接 |
os.path.join(a, b) |
智能拼接路径(自动处理 Windows \ 和 Linux / 的差异)。 例:把文件夹和文件名拼成完整路径。 |
444 |
| 文件名拆分 |
os.path.splitext(path) |
将文件名拆分为 (主文件名, 扩展名)。 例:区分 .jpg 和 .png。 |
5555 |
| 获取列表 |
os.listdir(path) |
获取指定文件夹下的所有文件和文件夹名称列表。 |
6666 |
| 文件重命名 |
os.rename(src, dst) |
将文件从 src 重命名(或移动)为 dst。 注意:目标路径若已存在可能会覆盖或报错。 |
7777 |
| 判断检查 |
os.path.isfile(path) |
判断给定的路径是否是一个文件。 |
8888 |
|
os.path.exists(path) |
判断路径(文件或文件夹)是否存在。 |
|
| 获取目录 |
os.getcwd() |
获取当前工作目录 (Current Working Directory)。 |
9 |
| 库/模块 |
操作 |
代码示例/函数 |
说明 |
试卷考点关联 |
| csv 模块 (标准库) |
读取 |
reader = csv.reader(f) |
返回一个迭代器,按行读取。 |
10101010 |
|
跳过标题 |
next(reader) |
手动跳过第一行表头。 |
11111111 |
|
写入 |
writer.writerow(list) |
写入单行数据。 |
|
| pandas 库 (第三方) |
读取 |
pd.read_csv(file) |
直接读成 DataFrame,功能更强大。 注意处理中文需设 encoding。 |
12121212 |
|
写入 |
df.to_csv(file) |
将数据框保存为 CSV 文件。 |
|
|
统计 |
df['列'].value_counts() |
快速统计分类数据(如各班人数)。 |
13131313 |
| 考点 |
核心问题 |
答案/解释 |
教学重点 |
| 可变与不可变 |
列表和元组的区别?字典的键可以是列表吗? |
列表可变,元组不可变。字典的键必须是不可变类型(所以列表不能做键,元组可以)。 |
这是一个送分题,也是送命题。 |
is vs == |
a is b 和 a == b 有什么区别? |
== 比较数值是否相等;is 比较内存地址(id)是否相同。 |
强调:None 判断一定要用 is None。 |
| 深拷贝 vs 浅拷贝 |
b = a,c = copy.copy(a),d = copy.deepcopy(a) 的区别? |
赋值是引用(贴标签);浅拷贝只拷第一层;深拷贝递归拷贝所有层(完全独立)。 |
画内存图教学最直观。 |
| 变量交换 |
不用中间变量交换 a 和 b? |
a, b = b, a |
Python 特有的优雅写法。 |
| 逻辑运算 |
and 和 or 的短路机制 |
x and y:x假返x,否则返y;x or y:x真返x,否则返y。 |
容易考计算题,如 print(0 and 10) 输出 0。 |
| 考点 |
关键概念 |
面试常见问法 |
| 装饰器 (Decorator) |
@wrapper |
问:什么是装饰器? 答:在不修改原函数代码的前提下,为函数增加新功能(如计时、日志)。 |
| 生成器 (Generator) |
yield |
问:yield 和 return 的区别? 答:return 结束函数;yield 暂停函数并保存状态,下次调用从暂停处继续(省内存)。 |
| 面向对象 (OOP) |
__init__ self |
问:self 是什么? 答:代表类的实例对象本身(即“谁调用这个方法,self 就是谁”)。 |
| 文件管理 |
with open |
问:为什么要用 with? 答:上下文管理器,确保文件在使用后自动关闭,防止资源泄露。 |
| 异常处理 |
try...except |
问:except Exception as e 捕获什么? 答:捕获所有常规错误,防止程序崩溃。 |
| 模块 |
核心方法 |
考点/面试题 |
备注 |
| Random (随机数) |
random.randint(a, b) |
生成 [a, b] 范围内的整数(包含 b,这是一个特例大坑)。 |
游戏抽奖必用。 |
|
random.random() |
生成 [0.0, 1.0) 之间的浮点数。 |
|
|
random.choice(seq) |
从列表中随机选一个元素。 |
|
|
random.shuffle(lst) |
原地打乱列表顺序(无返回值)。 |
1 试卷第19题考点。 |
| Datetime (日期时间) |
datetime.now() |
获取当前时间。 |
|
|
.strftime("%Y-%m-%d") |
格式化:把时间对象转成字符串(Time -> String)。 |
区分大小写:%Y是2025,%y是25;%m是月,%M是分。 |
|
.strptime(str, fmt) |
解析:把字符串转成时间对象(String -> Time)。 |
|
| JSON (数据交换) |
json.dumps(obj) |
把 Python 字典转成 JSON 字符串(序列化)。 |
接口开发常用。 |
|
json.loads(str) |
把 JSON 字符串转成 Python 字典(反序列化)。 |
爬虫数据解析常用。 |
| 符号/方法 |
含义/作用 |
常见考题示例 |
\d |
匹配数字 (0-9) |
匹配手机号前3位:^\d{3} |
\w |
匹配字母、数字、下划线 |
匹配变量名是否合法。 |
. |
匹配任意字符 (除换行符) |
爬虫中常用 .*? 非贪婪匹配提取内容。 |
^ / ` |
符号/方法 |
含义/作用 |
| -------------- |
----------------------- |
------------------------------------------------------------ |
\d |
匹配数字 (0-9) |
匹配手机号前3位:^\d{3} |
\w |
匹配字母、数字、下划线 |
匹配变量名是否合法。 |
. |
匹配任意字符 (除换行符) |
爬虫中常用 .*? 非贪婪匹配提取内容。 |
| 匹配开头 / 匹配结尾 | 验证整个字符串是否符合格式。 |
| re.match() | 仅从开头匹配 | 问:re.match('b', 'abc') 返回什么? 答:None(因为开头是a)。 |
| re.search() | 扫描整个字符串匹配 | 问:re.search('b', 'abc') 返回什么? 答:匹配对象(找到b)。 |
| re.findall() | 找到所有匹配项 | 返回一个列表,包含所有结果。 |
| 概念 |
知识点 |
常见考法 |
| 排序 |
list.sort() vs sorted() |
问:区别是什么? 答:sort 改变原列表(无返回值);sorted 返回新列表(原列表不变)。 |
| 递归 |
函数自己调用自己 |
代码题:写一个计算阶乘 n! 的函数。 return n * fac(n-1) |
| 二分查找 |
前提是有序序列 |
问:在100个有序数字中找一个数,最多找几次? 答:约7次 (\(2^7 > 100\))。 |
| 栈与队列 |
数据进出顺序 |
栈:先进后出 (LIFO, 像压弹夹)。 队列:先进先出 (FIFO, 像排队)。 |
| 关键字 |
作用/执行时机 |
教学口诀 |
典型考题 |
| try |
包裹可能出错的代码块。 |
“大胆尝试” |
|
| except |
只有在 try 块报错时才执行。 |
“出错兜底” |
问:可以有多个 except 吗? 答:可以,先抓具体错误(如 ValueError),最后抓总错误(Exception)。 |
| else |
只有在 try 块没报错时才执行。 |
“没事庆祝” |
问:else 块必须要有 except 吗? 答:必须配合 try/except 使用。 |
| finally |
无论是否报错,最后一定执行。 (常用于关闭文件、断开数据库)。 |
“无论如何,必须要干” |
代码阅读题:函数在 try 里 return 了,finally 还会执行吗? 答:会! 这是最经典的坑。 |
| raise |
主动抛出一个异常。 |
“自爆” |
用于业务逻辑检查,如 if age < 0: raise ValueError。 |
| 方法名 |
触发时机/作用 |
常见面试题 |
__init__ |
构造函数。创建对象时自动调用,用于初始化属性。 |
问:必须写返回值吗? 答:不能有返回值(只能返 None)。 |
__str__ |
打印对象时调用。即 print(obj) 时显示的内容。 |
问:如果不写这个会打印什么? 答:打印 <__main__.Class object at 0x...> 这种看不懂的内存地址。 |
__new__ |
创建实例时调用(比 __init__ 先执行)。 |
高阶题:单例模式(Singleton)通常在哪里实现? 答:在 __new__ 里控制。 |
__call__ |
把对象当函数用时调用。 |
代码题:p = Person(); p()。这行代码合法吗? 答:如果类里定义了 __call__ 就合法。 |
| 概念 |
知识点 |
解释/考法 |
| 程序入口 |
if __name__ == '__main__': |
作用:防止被别的模块 import 导入时,自动执行测试代码。 原理:直接运行时 __name__ 是 '__main__';被导入时 __name__ 是文件名。 |
| LEGB 规则 |
变量查找顺序 |
Local (局部) \(\rightarrow\) Enclosing (闭包外层) \(\rightarrow\) Global (全局) \(\rightarrow\) Built-in (内置)。 口诀:先看自己兜里有没有,没有再往外找。 |
| Global |
修改全局变量 |
错题集:函数内直接 x = 10 (x是全局变量) 会怎样? 答:会变成创建一个新的局部变量 x。想改全局的必须先声明 global x。 |
其他零碎但重要的知识点
- 断言 (
assert):
- 用法:
assert age >= 18, "未成年"
- 作用:防御性编程。如果条件为假,程序直接崩溃报错。常用于调试。
- 迭代器 (
Iterator) vs 可迭代对象 (Iterable):
- Iterable:凡是能用
for 循环遍历的都是(列表、字符串)。
- Iterator:可以用
next() 一个个取值的对象(生成器、文件句柄)。
- 考点:列表是 Iterable 但不是 Iterator。
- ZIP 函数:
- 作用:
zip([1,2], ['A','B']) \(\rightarrow\) [(1,'A'), (2,'B')]。
- 场景:同时遍历两个列表(如试卷中把图片和ID配对)。