Python八股

2 阅读9分钟

Python 面试题速记通关版


📚 目录

  1. 基础语法与数据类型
  2. 数据结构详解
  3. 函数与模块
  4. 面向对象编程 (OOP)
  5. 高级特性与内存管理
  6. 并发编程与性能优化
  7. 异常处理与文件操作
  8. 常用库与框架
  9. Python 2 vs Python 3

1. 基础语法与数据类型

1.1 Python 的特点与优缺点

  • 特点

    • 语法简洁,强制缩进,可读性强。
    • 动态类型,开发效率高。
    • 解释型语言,跨平台。
    • 胶水语言,可轻松调用 C/C++ 库。
    • 生态丰富(NumPy, Pandas, Django, PyTorch 等)。
  • 优点:快速原型开发,代码量少,社区活跃。

  • 缺点/局限性

    • 执行效率低:解释执行,比 C/C++ 慢 10-100 倍。
    • GIL 限制:全局解释器锁导致多线程无法利用多核 CPU(仅适合 I/O 密集型)。
    • 移动端/嵌入式支持弱
    • 打包分发麻烦:体积大,依赖复杂。
    • 类型系统松散:大型项目维护难(需配合 Type Hint)。

1.2 代码执行过程

  1. 编译.py 源码编译成字节码 (.pyc),存入 __pycache__
  2. 解释执行:CPython 虚拟机逐行解释执行字节码。
  3. GIL 机制:同一时刻只有一个线程执行字节码。

1.3 变量与赋值

  • 多变量赋值

    • 同值:a = b = c = 10(注意可变对象引用问题)。
    • 解包:x, y, z = 1, 2, 3x, 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,支持 * 收集多余元素。
  • Namedtuplecollections.namedtuple,可通过字段名访问,兼具元组性能和字典可读性。

3. 函数与模块

3.1 函数定义与参数

  • 参数类型

    1. 必选参数
    2. 默认参数(陷阱:不能用可变对象如 list 做默认值)
    3. 可变参数 *args (接收为 tuple)
    4. 关键字参数 **kwargs (接收为 dict)
    5. 命名关键字参数
  • 顺序:必选 > 默认 > *args > 命名关键字 > **kwargs

  • Lambda 函数:匿名函数 lambda x: x*2,常用于 map, filter, sorted

  • 作用域 (LEGB) :Local -> Enclosing -> Global -> Built-in。

    • global 声明全局变量。
    • nonlocal 声明外层嵌套变量。

3.2 高阶函数

  • Mapmap(func, iterable),对每个元素应用函数,返回迭代器。
  • Filterfilter(func, iterable),筛选 True 的元素,返回迭代器。
  • Reducefunctools.reduce(func, iterable),累积计算(如求和、积)。
  • Zipzip(iter1, iter2),打包成元组迭代器;zip(*pairs) 可解压。
  • Enumerateenumerate(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/Dirhelp(obj) 查文档,dir(obj) 查属性方法。

4. 面向对象编程 (OOP)

4.1 核心概念

  • 类 (Class) :模板/图纸。
  • 对象 (Object) :实例/具体产品。
  • Self:代表实例本身,必须作为实例方法的第一个参数。

4.2 四大特性

  1. 封装:隐藏内部细节,通过接口访问。Python 用 ___ 约定私有。

  2. 继承:复用父类代码,支持多重继承

    • MRO (方法解析顺序) :C3 线性化算法,可通过 Class.__mro__ 查看。
    • super():调用父类方法,解决多重继承冲突。
  3. 多态

    1. 同一接口不同实现。
    2. Python 依赖鸭子类型 (Duck Typing)——“有 quack 方法就是鸭子”,不强制继承。
  4. 抽象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 影响受限制,无法并行计算不受限,每个进程独立解释器
开销小,共享内存大,进程间通信成本高
实现ThreadPoolExecutorProcessPoolExecutor

6.3 性能分析与优化

  • 分析工具

    • cProfile:宏观函数耗时统计。
    • line_profiler:逐行分析。
    • memory_profiler:内存分析。
    • timeit:微基准测试。
  • 优化手段

    • I/O 密集:使用 asyncio 或多线程。
    • CPU 密集:使用多进程、Cython、Numba (JIT)、或调用 C/Rust 扩展。
    • 算法优化:选择合适数据结构(如 set 代替 list 查找)。
    • 大文件处理:流式读取 (read(chunk), 逐行迭代),避免 readlines()

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:时间处理。
  • collectionsdefaultdict, Counter, deque, namedtuple
  • random / secrets:随机数(secrets 用于加密安全)。
  • logging:日志记录。
  • unittest / pytest:单元测试。
  • re:正则。
  • itertools:高效迭代工具。
  • functoolsreduce, 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 2Python 3
Print语句 print "hi"函数 print("hi")
字符串str (字节), unicodestr (Unicode), bytes
除法/ 整数除 (5/2=2)/ 浮点除 (5/2=2.5), // 整数除
Range返回列表返回迭代器 (省内存)
异常except E, e:except E as e:
输入raw_input()input()
现状已停止维护 (2020)主流版本

结语:本速记版涵盖了 Python 面试中的核心考点。
建议结合实际代码练习,深入理解底层原理(如 GIL、内存管理、MRO),并在项目中灵活运用数据结构与并发模型。祝面试顺利!