跳到主要内容

Python 基础知识体系概览

为什么要学 Python 基础

Python 以其简洁优雅的语法和强大的生态成为当今最流行的编程语言之一。无论是 Web 开发、数据科学、AI/ML 还是自动化运维,Python 都是首选语言。扎实的 Python 基础是面试和日常开发的根基。

核心知识体系

Python 的核心特点

特点说明
动态类型变量无需声明类型,运行时确定
强类型不同类型之间不会隐式转换("1" + 1 报错)
解释执行源码 → 字节码 → PVM 解释执行
GIL全局解释器锁,限制多线程并行(CPU 密集型)
鸭子类型"如果它走路像鸭子,叫声像鸭子,那它就是鸭子"
万物皆对象函数、类、模块都是对象
缩进即语法使用缩进而非花括号定义代码块

执行模型

Python 的执行分为两步:

  1. 编译阶段:将 .py 源码编译为字节码(bytecode),缓存为 .pyc 文件
  2. 解释阶段: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, boollist
str, tupledict
frozenset, bytesset, 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 核心特性⭐⭐⭐

相关链接