Python 基础知识体系概览
为什么要学 Python 基础
Python 以其简洁优雅的语法和强大的生态成为当今最流行的编程语言之一。无论是 Web 开发、数据科学、AI/ML 还是自动化运维,Python 都是首选语言。扎实的 Python 基础是面试和日常开发的根基。
核心知识体系
Python 的核心特点
| 特点 | 说明 |
|---|---|
| 动态类型 | 变量无需声明类型,运行时确定 |
| 强类型 | 不同类型之间不会隐式转换("1" + 1 报错) |
| 解释执行 | 源码 → 字节码 → PVM 解释执行 |
| GIL | 全局解释器锁,限制多线程并行(CPU 密集型) |
| 鸭子类型 | "如果它走路像鸭子,叫声像鸭子,那它就是鸭子" |
| 万物皆对象 | 函数、类、模块都是对象 |
| 缩进即语法 | 使用缩进而非花括号定义代码块 |
执行模型
Python 的执行分为两步:
- 编译阶段:将
.py源码编译为字节码(bytecode),缓存为.pyc文件 - 解释阶段:Python 虚拟机(PVM)逐条执行字节码指令
CPython 是默认实现
Python 有多个实现:CPython(C 语言,最常用)、PyPy(JIT 编译,更快)、Jython(JVM)、GraalPy 等。面试中提到"Python"默认指 CPython。
数据模型:万物皆对象
Python 中一切皆对象,每个对象包含三要素:
x = 42
# 1. 身份(identity):内存地址,用 id() 获取
print(id(x)) # 如 140234866584880
# 2. 类型(type):决定对象支持哪些操作
print(type(x)) # <class 'int'>
# 3. 值(value):对象存储的数据
print(x) # 42
可变(mutable)与不可变(immutable):
| 不可变类型 | 可变类型 |
|---|---|
int, float, bool | list |
str, tuple | dict |
frozenset, bytes | set, bytearray |
不可变 ≠ 不能"修改"
不可变是指对象本身不能修改,但变量可以重新绑定:
x = 1
x = 2 # ✅ x 指向了新对象,原对象 1 未变
类型系统
Python 是动态强类型语言:
- 动态类型:变量类型在运行时确定,同一变量可绑定不同类型
- 强类型:不允许隐式类型混合运算
# 动态类型
x = 1 # x 是 int
x = "hello" # x 变成 str,完全合法
# 强类型
"1" + 1 # ❌ TypeError: can only concatenate str to str
"1" + str(1) # ✅ "11",需要显式转换
鸭子类型(Duck Typing)
class Duck:
def quack(self):
print("嘎嘎嘎")
class Person:
def quack(self):
print("我在模仿鸭子叫")
def make_it_quack(thing):
# 不检查类型,只关心有没有 quack 方法
thing.quack()
make_it_quack(Duck()) # 嘎嘎嘎
make_it_quack(Person()) # 我在模仿鸭子叫
作用域与变量查找
Python 使用 LEGB 规则查找变量:
x = "global" # Global
def outer():
x = "enclosing" # Enclosing
def inner():
x = "local" # Local
print(x) # → "local"(L 层找到)
inner()
outer()
print(len) # <built-in function len>(B 层)
面向对象核心
MRO(方法解析顺序)
Python 使用 C3 线性化算法确定多继承时的方法调用顺序:
class A:
def method(self):
print("A")
class B(A):
def method(self):
print("B")
class C(A):
def method(self):
print("C")
class D(B, C):
pass
d = D()
d.method() # → "B"
print(D.mro()) # [D, B, C, A, object]
魔术方法(Dunder Methods)
| 分类 | 方法 | 用途 |
|---|---|---|
| 构造析构 | __init__, __new__, __del__ | 对象创建与销毁 |
| 字符串 | __str__, __repr__ | 字符串表示 |
| 比较 | __eq__, __lt__, __hash__ | 比较与哈希 |
| 容器 | __len__, __getitem__, __contains__ | 容器协议 |
| 算术 | __add__, __mul__, __radd__ | 运算符重载 |
| 上下文 | __enter__, __exit__ | with 语句 |
| 可调用 | __call__ | 实例当函数调用 |
| 属性访问 | __getattr__, __setattr__, __getattribute__ | 属性拦截 |
高级特性速览
装饰器
import functools
def timer(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
import time
start = time.time()
result = func(*args, **kwargs)
print(f"{func.__name__} 耗时 {time.time() - start:.4f}s")
return result
return wrapper
@timer
def slow_function():
import time
time.sleep(1)
生成器
def fibonacci():
"""惰性求值,无限斐波那契数列"""
a, b = 0, 1
while True:
yield a
a, b = b, a + b
# 按需计算,不占用大量内存
fib = fibonacci()
print([next(fib) for _ in range(10)])
# [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
上下文管理器
from contextlib import contextmanager
@contextmanager
def managed_resource(name):
print(f"获取资源: {name}")
try:
yield name
finally:
print(f"释放资源: {name}")
with managed_resource("DB连接") as r:
print(f"使用 {r}")
# 获取资源: DB连接
# 使用 DB连接
# 释放资源: DB连接
知识点关联
本分类涵盖以下核心知识点:
| 文档 | 核心内容 | 面试重要度 |
|---|---|---|
| 数据类型 | 可变/不可变、深浅拷贝、类型转换 | ⭐⭐⭐⭐⭐ |
| 函数 | 参数、闭包、lambda、一等公民 | ⭐⭐⭐⭐⭐ |
| 类与面向对象 | 继承、MRO、魔术方法、描述符 | ⭐⭐⭐⭐⭐ |
| 装饰器 | 函数/类装饰器、带参装饰器 | ⭐⭐⭐⭐⭐ |
| 生成器与迭代器 | yield、迭代协议、惰性求值 | ⭐⭐⭐⭐ |
| 上下文管理器 | with 协议、contextlib | ⭐⭐⭐⭐ |
| 元类 | type、__new__、ABCMeta | ⭐⭐⭐ |
| 作用域与闭包 | LEGB、nonlocal、闭包陷阱 | ⭐⭐⭐⭐ |
| Python 新特性 | 3.8~3.13 核心特性 | ⭐⭐⭐ |