Python 经典面试题与核心知识点详解
本文整理了 Python 面试中的高频考点,涵盖内存管理、迭代器、生成器、装饰器、元类等核心概念,并附带详细解析与代码示例,帮助开发者系统复习。
系统梳理了 Python 面试中的高频考点,包括参数传递机制、类与对象模型、迭代器与生成器原理、装饰器及 GIL 锁等核心概念。内容涵盖基础语法细节、内存管理策略、并发编程模型以及常见编码陷阱,通过代码示例与深度解析,帮助开发者全面理解 Python 运行机制,提升面试通过率。

本文整理了 Python 面试中的高频考点,涵盖内存管理、迭代器、生成器、装饰器、元类等核心概念,并附带详细解析与代码示例,帮助开发者系统复习。
在 Python 中,参数传递机制既不是纯粹的值传递,也不是纯粹的引用传递,而是'对象引用传递'(Call by Object Reference)。
str、元组 tuple、数字 int/float):当作为参数传递时,行为类似值传递。函数内部修改该变量会创建新对象,不影响外部变量。list、字典 dict、集合 set):当作为参数传递时,行为类似引用传递。函数内部修改对象内容(如 append),会影响外部对象。# 不可变对象示例
a = 10
def modify_immutable(x):
x = 20
modify_immutable(a)
print(a) # 输出 10
# 可变对象示例
b = [1, 2]
def modify_mutable(lst):
lst.append(3)
modify_mutable(b)
print(b) # 输出 [1, 2, 3]
def func(a): # a 是形参
print(a)
x = 10
func(x) # x 是实参
a = 1
def fun(a):
a = 2
fun(a)
print(a) # 输出 1
解析:函数内部的 a 是局部变量,遮蔽了外部的全局变量 a。赋值操作 a=2 创建了新的局部整数对象,未改变全局 a 的引用。
元类是类的类。在 Python 中,一切皆对象,类也是对象。创建类实例时调用的是类,而创建类本身时调用的是元类。
type。class Meta(type):
def __new__(cls, name, bases, attrs):
return super().__new__(cls, name, bases, attrs)
class MyClass(metaclass=Meta):
pass
__new__ 方法,负责创建实例对象。__init__ 方法,负责初始化实例属性。通常在 __new__ 返回实例后自动调用。class Person:
def __new__(cls, *args, **kwargs):
instance = super().__new__(cls)
return instance
def __init__(self, name):
self.name = name
__init__ 中,每个实例拥有独立副本。class Test:
count = 0 # 类变量
def __init__(self):
self.id = id(self) # 实例变量
Test.count += 1
self,访问实例属性。@classmethod 装饰器,第一个参数是 cls,可访问类属性。@staticmethod 装饰器,无默认参数,相当于普通函数放在类命名空间中。class A:
class_var = "class"
def instance_method(self):
print("Instance", self.class_var)
@classmethod
def class_method(cls):
print("Class", cls.class_var)
@staticmethod
def static_method():
print("Static")
自省是指程序在运行时检查对象类型和属性的能力。
常用内建函数:
type(obj):获取对象类型。dir(obj):列出对象属性和方法。getattr(obj, name):获取属性值。hasattr(obj, name):判断是否存在属性。isinstance(obj, Class):判断对象是否属于某类。用于简洁地创建列表。
squares = [x**2 for x in range(10)]
even_squares = [x**2 for x in range(10) if x % 2 == 0]
{key: value for ...}{item for ...}words = ['hello', 'world']
dict_comp = {w: len(w) for w in words}
set_comp = {w[0] for w in words}
_foo:保护成员,约定不直接访问,但可通过 from module import * 导入。__foo:名称修饰(Name Mangling),变为 _ClassName__foo,防止子类意外覆盖。__foo__:特殊方法(Magic Methods),如 __init__, __call__,由 Python 解释器调用。将 [] 改为 () 会创建生成器对象,节省内存。
L = [x*x for x in range(1000000)] # 占用大量内存
G = (x*x for x in range(1000000)) # 惰性计算,仅存状态
迭代器实现了迭代协议:__iter__() 和 __next__()。
it = iter([1, 2, 3])
print(next(it)) # 1
print(next(it)) # 2
iter() 转为迭代器。生成器是一种特殊的迭代器,通过函数中使用 yield 关键字实现。
yield 暂停执行,保存上下文,下次调用恢复。def gen():
yield 1
yield 2
yield 3
调用生成器函数返回生成器对象,不执行函数体。首次 next() 执行到 yield 返回值并挂起。再次 next() 从上次挂起点继续。
yield 自动生成状态,无需手动实现 __iter__ 和 __next__。StopIteration 异常。yield 与 return 的区别return:结束函数执行,返回结果。yield:暂停函数,返回一个值,保留状态供后续恢复。for 循环的原理__iter__() 获取迭代器。__next__()。StopIteration 异常退出循环。range() 返回的是迭代器吗?range 对象,是可迭代对象(Iterable),但不是迭代器(Iterator)。需调用 iter() 获取迭代器。range 对象内存占用range 对象只存储 start, stop, step 三个整数,无论序列多长,内存占用恒定。元素仅在遍历时计算。
*args 与 **kwargs*args:接收任意数量的位置参数,打包为元组。**kwargs:接收任意数量的关键字参数,打包为字典。def func(*args, **kwargs):
print(args, kwargs)
装饰器本质是高阶函数,用于在不修改原代码的情况下增强功能。
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Before call")
result = func(*args, **kwargs)
print("After call")
return result
return wrapper
@my_decorator
def say_hello():
print("Hello")
描述符定义了属性访问行为(__get__, __set__, __delete__)。property 就是基于描述符实现的。
CPython 解释器中,同一时刻只有一个线程能执行字节码。
multiprocessing)或 C 扩展释放 GIL。Python 主要采用引用计数和分代回收机制。
def f(a=[]) 会导致 a 在多次调用间共享。应使用 None 初始化。copy.copy 只复制第一层,嵌套对象仍共享。asyncio,单线程高并发,适合网络请求。venv)隔离依赖。unittest / pytest)。以上涵盖了 Python 面试中的核心知识点。掌握这些内容有助于应对大多数技术面试中的基础与进阶问题。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online