摘要:Ø 不可变:int,float,str,tuple,bool,frozenset
以下是 Python 常见的面试题及简要答案示例,覆盖基础语法、数据结构、算法和高级特性等方向:
一、Python 基础
Python 中可变(Mutable)和不可变(Immutable)数据类型有哪些?Ø 不可变:int, float, str, tuple, bool, frozenset
Ø 可变:list, dict, set, bytearray
列表(List)和元组(Tuple)的区别?Ø 列表可变,元组不可变;
Ø 列表用 ,元组用 ;
Ø 元组适合存储固定数据(如配置项),性能略优。
解释装饰器(Decorator)的作用,写一个记录函数执行时间的装饰器。python
import time
def timer_decorator(func):
def wrapper(*args, **kwargs):
start = time.time
result = func(*args, **kwargs)
print(f"{func.__name__} 执行时间: {time.time - start:.2f}秒")
return result
return wrapper
@timer_decorator
def my_function:
time.sleep(1)
生成器(Generator)和迭代器(Iterator)的区别?Ø 生成器是迭代器的一种,通过 yield 关键字实现,惰性计算,节省内存;
Ø 迭代器需实现 __iter__ 和 __next__ 方法。
解释 GIL(Global Interpreter Lock)及其影响。Ø GIL 是 CPython 解释器的全局锁,同一时刻仅一个线程执行 Python 字节码;
Ø 导致多线程无法充分利用多核 CPU,适合 I/O 密集型任务,计算密集型建议用多进程。
二、数据结构与算法
如何去除列表中的重复元素并保持顺序?python
def remove_duplicates(lst):
seen = set
return [x for x in lst if not (x in seen or seen.add(x))]
反转字符串(如 "hello" → "olleh")。python
s = "hello"
reversed_s = s[::-1]
找出列表中重复的元素(时间复杂度 O(n))。python
from collections import Counter
def find_duplicates(lst):
return [k for k, v in Counter(lst).items if v > 1]
快速排序实现。python
def quick_sort(arr):
if len(arr)
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
三、面向对象编程
类变量和实例变量的区别?Ø 类变量由所有实例共享,实例变量属于特定实例。
实现单例模式(Singleton)。python
class Singleton:
_instance = None
def __new__(cls):
if not cls._instance:
cls._instance = super.__new__(cls)
return cls._instance
魔术方法 __str__ 和 __repr__ 的区别?Ø __str__ 用于用户友好的字符串表示(如 print(obj));
Ø __repr__ 用于开发者调试,应明确对象信息。
四、高级特性
深拷贝(Deep copy)和浅拷贝(Shallow Copy)的区别?浅拷贝(copy.copy)复制顶层对象,引用嵌套对象;深拷贝(copy.deepcopy)递归复制所有对象。闭包(Closure)是什么?写一个例子。python
def outer_func(x):
def inner_func(y):
return x + y
return inner_func
closure = outer_func(10)
print(closure(5)) # 输出 15
五、编码题示例
斐波那契数列生成器:python
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
检查括号是否匹配:python
def is_valid_parentheses(s):
stack =
mapping = {')': '(', '}': '{', ']': '['}
for char in s:
if char in mapping:
top = stack.pop if stack else '#'
if mapping[char] != top:
return False
else:
stack.append(char)
return not stack
六、其他常见问题
Python 的垃圾回收机制(引用计数 + 分代回收)。多进程 vs 多线程的应用场景。Django 和 Flask 的核心区别?Python 3.8+ 的新特性(如海象运算符 :=,位置参数 /)。面试时需结合具体场景灵活回答,建议通过实际项目经验举例说明。
来源:老客数据一点号