Python 面试题速记通关版
📚 目录
1. 基础语法与数据类型
1.1 Python 的特点与优缺点
-
特点:
- 语法简洁,强制缩进,可读性强。
- 动态类型,开发效率高。
- 解释型语言,跨平台。
- 胶水语言,可轻松调用 C/C++ 库。
- 生态丰富(NumPy, Pandas, Django, PyTorch 等)。
-
优点:快速原型开发,代码量少,社区活跃。
-
缺点/局限性:
- 执行效率低:解释执行,比 C/C++ 慢 10-100 倍。
- GIL 限制:全局解释器锁导致多线程无法利用多核 CPU(仅适合 I/O 密集型)。
- 移动端/嵌入式支持弱。
- 打包分发麻烦:体积大,依赖复杂。
- 类型系统松散:大型项目维护难(需配合 Type Hint)。
1.2 代码执行过程
- 编译:
.py源码编译成字节码 (.pyc),存入__pycache__。 - 解释执行:CPython 虚拟机逐行解释执行字节码。
- GIL 机制:同一时刻只有一个线程执行字节码。
1.3 变量与赋值
-
多变量赋值:
- 同值:
a = b = c = 10(注意可变对象引用问题)。 - 解包:
x, y, z = 1, 2, 3或x, y = y, x(交换变量)。 - 扩展解包:
first, *middle, last = [1, 2, 3, 4, 5]。
- 同值:
-
标识符命名:
-
规则:字母/数字/下划线,不能数字开头,区分大小写。
-
约定:
_name:内部使用(Protected)。__name:名称改写(Private,防子类覆盖)。__name__:魔术方法(系统定义)。
-
-
注释:
- 单行:
#。 - 多行/文档字符串:
''' '''或""" """(实际上是字符串,常作 docstring)。
- 单行:
1.4 运算符大全
| 类别 | 运算符 | 说明 |
|---|---|---|
| 算术 | +, -, *, / | 加减乘除(/ 结果为 float) |
// | 向下取整除法(向负无穷) | |
% | 取模(符号跟随右操作数) | |
** | 幂运算 | |
| 比较 | ==, !=, <, >, <=, >= | 返回值布尔型 |
| 身份 | is, is not | 比较内存地址 (id()) |
| 成员 | in, not in | 判断元素是否存在于容器 |
| 逻辑 | and, or, not | 短路求值,返回操作数本身而非布尔值 |
| 位运算 | &, |, ^, ~, <<, >> | 直接操作二进制位(权限控制、高性能计算) |
| 三元表达式 | A if condition else B | 条件赋值 |
1.5 进制转换
-
表示:二进制
0b,八进制0o,十六进制0x。 -
转换函数:
int(str, base):转十进制。bin(),oct(),hex():转对应进制字符串。
2. 数据结构详解
2.1 内置数据结构对比
| 类型 | 有序性 | 可变性 | 重复性 | 索引/Key | 典型应用 |
|---|---|---|---|---|---|
| List | ✅ | ✅ | ✅ | 索引 | 动态集合 |
| Tuple | ✅ | ❌ | ✅ | 索引 | 固定记录、字典 Key |
| Dict | ✅ (3.7+) | ✅ | Key 唯一 | Key (O(1)) | 映射、缓存 |
| Set | ❌ | ✅ | ❌ | 无 | 去重、成员判断 |
| Str | ✅ | ❌ | ✅ | 索引 | 文本处理 |
2.2 列表 (List) 操作
-
增:
append()(末尾加一个),insert()(指定位置),extend()(合并 iterable)。 -
删:
remove(value):按值删除第一个匹配项。del list[index]:按索引删除,也可删切片或整个变量。pop(index):按索引删除并返回该元素(默认最后一个)。
-
其他:
- 反转:
[::-1](切片,推荐),reversed()。 - 排序:
sort()(原地),sorted()(返回新列表)。 - 负索引:
list[-1]表示最后一个元素。
- 反转:
2.3 字典 (Dict) 操作
- 获取键:
.keys()(返回视图对象),直接遍历for k in dict。 - 安全访问:
.get(key, default)避免 KeyError。 - 遍历:
.items()同时获取键值对。 - 注意:Key 必须是不可变类型(可哈希)。
2.4 字符串 (String) 操作
-
大小写:
.lower(),.upper()。 -
去空格:
.strip()(前后),.lstrip()(前),.rstrip()(后)。 -
拆分与合并:
split(sep): 拆分为列表。join(iterable): 列表合并为字符串(调用者是分隔符)。
-
替换:
replace(old, new, count)。translate()+maketrans()(批量字符替换,性能高)。
-
格式化:f-string
f"{var}"(推荐)。
2.5 元组 (Tuple)
- 特点:不可变,可作为字典 Key。
- 解封装:
a, b, c = tuple_var,支持*收集多余元素。 - Namedtuple:
collections.namedtuple,可通过字段名访问,兼具元组性能和字典可读性。
3. 函数与模块
3.1 函数定义与参数
-
参数类型:
- 必选参数
- 默认参数(陷阱:不能用可变对象如 list 做默认值)
- 可变参数
*args(接收为 tuple) - 关键字参数
**kwargs(接收为 dict) - 命名关键字参数
-
顺序:必选 > 默认 >
*args> 命名关键字 >**kwargs。 -
Lambda 函数:匿名函数
lambda x: x*2,常用于map,filter,sorted。 -
作用域 (LEGB) :Local -> Enclosing -> Global -> Built-in。
global声明全局变量。nonlocal声明外层嵌套变量。
3.2 高阶函数
- Map:
map(func, iterable),对每个元素应用函数,返回迭代器。 - Filter:
filter(func, iterable),筛选 True 的元素,返回迭代器。 - Reduce:
functools.reduce(func, iterable),累积计算(如求和、积)。 - Zip:
zip(iter1, iter2),打包成元组迭代器;zip(*pairs)可解压。 - Enumerate:
enumerate(iterable, start=0),同时获取索引和值。
3.3 生成器 (Generator) 与 迭代器 (Iterator)
-
Iterable (可迭代对象) :实现了
__iter__,如 list, str, dict。 -
Iterator (迭代器) :实现了
__iter__和__next__,一次性遍历,耗尽后需重建。 -
生成器:
- 函数中含
yield即为生成器函数。 - 优势:惰性计算,节省内存,适合处理大数据流或无限序列。
- 用法:
next(gen)或for循环。 - 协程:配合
send()实现双向通信。
- 函数中含
3.4 装饰器 (Decorator)
- 定义:接收函数作为参数,返回新函数,用于不修改原代码添加功能(日志、计时、权限)。
- 语法:
@decorator_name。 - 带参装饰器:三层嵌套函数。
- 原理:基于闭包(Closure),内部函数引用外部变量。
3.5 模块与包
- 模块:
.py文件。 - 包:包含
__init__.py的目录(Python 3.3+ 支持隐式命名空间包)。 - 入口控制:
if __name__ == "__main__":区分脚本运行与模块导入。 - Help/Dir:
help(obj)查文档,dir(obj)查属性方法。
4. 面向对象编程 (OOP)
4.1 核心概念
- 类 (Class) :模板/图纸。
- 对象 (Object) :实例/具体产品。
- Self:代表实例本身,必须作为实例方法的第一个参数。
4.2 四大特性
-
封装:隐藏内部细节,通过接口访问。Python 用
_和__约定私有。 -
继承:复用父类代码,支持多重继承。
- MRO (方法解析顺序) :C3 线性化算法,可通过
Class.__mro__查看。 super():调用父类方法,解决多重继承冲突。
- MRO (方法解析顺序) :C3 线性化算法,可通过
-
多态:
- 同一接口不同实现。
- Python 依赖鸭子类型 (Duck Typing)——“有 quack 方法就是鸭子”,不强制继承。
-
抽象:
abc模块定义抽象基类 (ABC) 和@abstractmethod,强制子类实现特定方法。
4.3 魔术方法 (Magic Methods)
-
构造/析构:
__new__:创建实例(静态方法,返回实例),用于控制实例创建(如单例)。__init__:初始化实例(实例方法,无返回值),设置属性。__del__:对象销毁前调用(不保证立即执行)。
-
运算符重载:
__add__(+),__eq__(==),__lt__(<) 等。 -
属性访问:
__getattr__,__setattr__,__getattribute__。 -
容器行为:
__len__,__getitem__,__iter__。 -
上下文管理:
__enter__,__exit__(配合with语句)。
5. 高级特性与内存管理
5.1 内存管理机制
-
引用计数:主要机制,计数归零即释放。
-
垃圾回收 (GC) :处理循环引用(分代回收)。
-
内存池:小整数 (-5 到 256) 和短字符串驻留机制。
-
优化技巧:
- 使用
__slots__减少实例内存占用。 - 使用生成器替代大列表。
- 避免循环引用。
- 使用
5.2 深浅拷贝
-
浅拷贝 (
copy.copy) :- 复制外层对象,内层子对象仍引用原地址。
- 修改嵌套可变对象会影响原对象。
-
深拷贝 (
copy.deepcopy) :递归复制所有层级,完全独立。
5.3 闭包 (Closure)
- 内部函数引用外部函数变量,即使外部函数结束,变量仍保留。
- 应用:装饰器、回调、状态保持。
5.4 Pickling (序列化)
pickle.dump()/pickle.load():Python 对象与字节流互转。- 注意:不安全,不要 unpickle 不可信数据;仅限 Python 间交互。
6. 并发编程与性能优化
6.1 GIL (全局解释器锁)
- 机制:同一时刻只有一个线程执行 Python 字节码。
- 影响:多线程无法利用多核 CPU 进行并行计算。
6.2 多线程 vs 多进程
| 特性 | 多线程 (threading) | 多进程 (multiprocessing) |
|---|---|---|
| 适用场景 | I/O 密集型 (网络请求、文件读写) | CPU 密集型 (科学计算、图像处理) |
| GIL 影响 | 受限制,无法并行计算 | 不受限,每个进程独立解释器 |
| 开销 | 小,共享内存 | 大,进程间通信成本高 |
| 实现 | ThreadPoolExecutor | ProcessPoolExecutor |
6.3 性能分析与优化
-
分析工具:
cProfile:宏观函数耗时统计。line_profiler:逐行分析。memory_profiler:内存分析。timeit:微基准测试。
-
优化手段:
- I/O 密集:使用
asyncio或多线程。 - CPU 密集:使用多进程、Cython、Numba (JIT)、或调用 C/Rust 扩展。
- 算法优化:选择合适数据结构(如 set 代替 list 查找)。
- 大文件处理:流式读取 (
read(chunk), 逐行迭代),避免readlines()。
- I/O 密集:使用
7. 异常处理与文件操作
7.1 常见异常
KeyError:字典键不存在。TypeError:类型错误(如字符串 + 数字)。ValueError:类型正确但值非法(如int('abc'))。IndexError:索引越界。
7.2 文件操作
-
打开方式:
with open('file', 'r', encoding='utf-8') as f:(自动关闭)。 -
读取方法:
read():一次性读全部(慎用大文件)。readline():读一行。readlines():读全部行到列表(慎用大文件)。- 推荐:直接迭代文件对象
for line in f:。
7.3 正则表达式 (re 模块)
match():从开头匹配。search():扫描整个字符串查找第一个匹配。split():按模式拆分。sub()/subn():替换(subn返回替换次数)。
8. 常用库与框架
8.1 标准库高频模块
os/pathlib:文件路径与系统交互。json:JSON 序列化/反序列化。datetime/time:时间处理。collections:defaultdict,Counter,deque,namedtuple。random/secrets:随机数(secrets用于加密安全)。logging:日志记录。unittest/pytest:单元测试。re:正则。itertools:高效迭代工具。functools:reduce,lru_cache,partial。concurrent.futures:线程池/进程池。
8.2 Web 框架
-
Flask:轻量级,灵活,适合微服务、API、原型。
- 核心:路由、Werkzeug、Jinja2。
-
Django:大而全,自带 ORM、Admin、Auth,适合大型复杂应用。
8.3 猴子补丁 (Monkey Patching)
- 运行时动态修改类或模块的行为。
- 用途:测试 Mock、无侵入监控。
- 风险:维护困难,逻辑混乱,生产环境慎用。
9. Python 2 vs Python 3
| 特性 | Python 2 | Python 3 |
|---|---|---|
语句 print "hi" | 函数 print("hi") | |
| 字符串 | str (字节), unicode | str (Unicode), bytes |
| 除法 | / 整数除 (5/2=2) | / 浮点除 (5/2=2.5), // 整数除 |
| Range | 返回列表 | 返回迭代器 (省内存) |
| 异常 | except E, e: | except E as e: |
| 输入 | raw_input() | input() |
| 现状 | 已停止维护 (2020) | 主流版本 |
结语:本速记版涵盖了 Python 面试中的核心考点。
建议结合实际代码练习,深入理解底层原理(如 GIL、内存管理、MRO),并在项目中灵活运用数据结构与并发模型。祝面试顺利!