Python 核心概念
- 变量不是“盒子”,而是对象的引用
- 函数、类、模块、异常,都是对象
def f(): ...
print(type(f)) # <class 'function'>
- 函数可以当参数、返回值
- 装饰器、回调、函数式编程的根基
传递的是对象引用(call by object reference)
def f(x):
x.append(1)
lst = []
f(lst)
print(lst) # [1]
关键理解
- 可变对象:list / dict / set
- 不可变对象:int / str / tuple
| 类型 | 是否可变 |
|---|---|
| int / float / str | ❌ |
| tuple(元素不可变) | ⚠️ |
| list / dict / set | ✅ |
a = 1
b = a
b += 1 # 创建新对象
- 默认参数陷阱
- 拷贝 / 深拷贝(deepcopy)的必要性
类型在运行时决定
x = 1
x = "hello"
不自动隐式转换
1 + "1" # TypeError
查找顺序
Local -> Enclosing -> Global -> Builtins
x = 1
def f():
print(x)
关键点
- global
- nonlocal
迭代协议
iter(obj)
next(it)
惰性对象
- generator
- map / filter / zip
- range
(x * 2 for x in range(10))
- 节省内存
- 支持大数据流处理
Python 风格
Easier to Ask Forgiveness than Permission
翻译:相比许可更易请求原谅
try:
x = d["key"]
except KeyError:
...
对比 LBYL(先判断)
- LBYL:瞻前顾后,先检查再操作。
- EAFP:先斩后奏,直接做再看后果。
- 赋值
- 作为参数
- 作为返回值
def outer():
def inner(): ...
return inner
- 装饰器
- 闭包
- 高阶函数
- 多继承(MRO)
- 鸭子类型
if hasattr(obj, "read"):
...
Favor Composition over Inheritance
翻译:优先选择组合而不是继承
__init__
__len__
__iter__
__enter__ / __exit__
__call__
行为由协议定义,而不是继承层级
| 模型 | 适用 |
|---|---|
| threading | IO 密集 |
| multiprocessing | CPU 密集 |
| asyncio | 高并发 IO |
- 保证解释器线程安全
- 不是 Python 语言层限制
import this
核心准则
- Readability counts (可读性很重要)
- Simple > Complex (简单胜过复杂)
- Explicit > Implicit (显示胜过隐式)
对象模型
├── 引用语义
├── 可变性
├── 数据模型
│ ├── 迭代
│ ├── 上下文
│ └── 魔术方法
├── 函数式
├── OOP
├── 并发模型
└── Pythonic 思维
- 对象 & 引用
- 可变 / 不可变
- 迭代 & 生成器
- 异常模型
- 函数 / 装饰器
- 数据模型
- asyncio
- 并发架构
- 类型系统(typing / pydantic)