一、Python 基础
1. Python 的特点
- 动态类型:变量无需声明类型。
- 解释型语言:逐行解释执行。
- 支持多种编程范式(面向对象、函数式、过程式)。
2. 列表(List)与元组(Tuple)的区别
| 特性 |
列表(List) |
元组(Tuple) |
| 可变性 |
可变 |
不可变 |
| 性能 |
较慢 |
较快 |
| 使用场景 |
数据需要频繁修改时 |
数据固定且不可更改时 |
3. 字典(Dict)与集合(Set)的区别
- 字典:键值对存储,用于快速查找。
- 集合:无序且唯一的元素集合,用于去重或集合运算。
4. GIL(全局解释器锁)是什么?
- GIL 是 Python 解释器中的一个互斥锁,确保同一时间只有一个线程执行 Python 字节码。
- 影响:多线程在 CPU 密集型任务中性能较差,但不影响 I/O 密集型任务。
5. 深拷贝与浅拷贝的区别
- 浅拷贝:只复制对象的引用,内部元素共享。
- 深拷贝:递归复制对象及其内部元素。
import copy
a = [1, 2, [3, 4]]
b = copy.copy(a) # 浅拷贝
c = copy.deepcopy(a) # 深拷贝
二、Python 进阶
1. 生成器与迭代器的区别
- 迭代器 :实现了
__iter__ 和 __next__ 方法的对象。
- 生成器 :通过
yield 关键字定义的函数,返回一个生成器对象。
# 迭代器示例
class MyIterator:
def __init__(self, data):
self.data = data
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index >= len(self.data):
raise StopIteration
value = self.data[self.index]
self.index += 1
return value
# 生成器示例
def my_generator(data):
for item in data:
yield item
2. 装饰器的作用与实现
- 作用:在不修改原函数代码的情况下扩展其功能。
- 实现:
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Before function call")
result = func(*args, **kwargs)
print("After function call")
return result
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
3. 上下文管理器
- 使用
with 语句管理资源(如文件、数据库连接)。
- 实现方式:
- 使用类实现
__enter__ 和 __exit__ 方法。
- 使用
contextlib 模块的 contextmanager 装饰器。
# 类实现
class MyContextManager:
def __enter__(self):
print("Entering context")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print("Exiting context")
# 使用 contextlib
from contextlib import contextmanager
@contextmanager
def my_context_manager():
print("Entering context")
try:
yield
finally:
print("Exiting context")
4. 异步编程
import asyncio
async def say_hello():
print("Hello")
await asyncio.sleep(1)
print("World")
asyncio.run(say_hello())
三、算法与数据结构
1. 常见排序算法
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[0]
left = [x for x in arr[1:] if x <= pivot]
right = [x for x in arr[1:] if x > pivot]
return quick_sort(left) + [pivot] + quick_sort(right)
2. 查找算法
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
四、Python 框架与工具
1. Django 与 Flask 的区别
| 特性 |
Django |
Flask |
| 复杂度 |
全栈框架,功能强大 |
微框架,轻量级 |
| 灵活性 |
较低 |
较高 |
| 适用场景 |
大型项目 |
小型项目或 API 开发 |
2. Pandas 常用操作
import pandas as pd
df = pd.read_csv('data.csv')
filtered_df = df[df['age'] > 30]
grouped_df = df.groupby('category').sum()
3. NumPy 常用操作
import numpy as np
arr = np.array([1, 2, 3])
matrix_a = np.array([[1, 2], [3, 4]])
matrix_b = np.array([[5, 6], [7, 8]])
result = np.dot(matrix_a, matrix_b)