Python面试问题

一、Python 基础

1. Python 的特点

  • 动态类型:变量无需声明类型。
  • 解释型语言:逐行解释执行。
  • 支持多种编程范式(面向对象、函数式、过程式)。

2. 列表(List)与元组(Tuple)的区别

特性 列表(List) 元组(Tuple)
可变性 可变 不可变
性能 较慢 较快
使用场景 数据需要频繁修改时 数据固定且不可更改时

3. 字典(Dict)与集合(Set)的区别

  • 字典:键值对存储,用于快速查找。
  • 集合:无序且唯一的元素集合,用于去重或集合运算。

4. GIL(全局解释器锁)是什么?

  • GIL 是 Python 解释器中的一个互斥锁,确保同一时间只有一个线程执行 Python 字节码。
  • 影响:多线程在 CPU 密集型任务中性能较差,但不影响 I/O 密集型任务。

5. 深拷贝与浅拷贝的区别

  • 浅拷贝:只复制对象的引用,内部元素共享。
  • 深拷贝:递归复制对象及其内部元素。
python 复制代码
import copy

a = [1, 2, [3, 4]]
b = copy.copy(a)  # 浅拷贝
c = copy.deepcopy(a)  # 深拷贝

二、Python 进阶

1. 生成器与迭代器的区别

  • 迭代器 :实现了 __iter____next__ 方法的对象。
  • 生成器 :通过 yield 关键字定义的函数,返回一个生成器对象。
python 复制代码
# 迭代器示例
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. 装饰器的作用与实现

  • 作用:在不修改原函数代码的情况下扩展其功能。
  • 实现
python 复制代码
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 装饰器。
python 复制代码
# 类实现
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. 异步编程

  • 使用 asyncio 模块实现异步操作。
  • 示例:
python 复制代码
import asyncio

async def say_hello():
    print("Hello")
    await asyncio.sleep(1)
    print("World")

asyncio.run(say_hello())

三、算法与数据结构

1. 常见排序算法

  • 冒泡排序
python 复制代码
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
  • 快速排序
python 复制代码
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. 查找算法

  • 二分查找
python 复制代码
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 常用操作

  • 读取 CSV 文件
python 复制代码
import pandas as pd

df = pd.read_csv('data.csv')
  • 数据筛选
python 复制代码
filtered_df = df[df['age'] > 30]
  • 数据聚合
python 复制代码
grouped_df = df.groupby('category').sum()

3. NumPy 常用操作

  • 创建数组:
python 复制代码
import numpy as np

arr = np.array([1, 2, 3])
  • 矩阵乘法:
python 复制代码
matrix_a = np.array([[1, 2], [3, 4]])
matrix_b = np.array([[5, 6], [7, 8]])
result = np.dot(matrix_a, matrix_b)

相关推荐
youyou-060637 分钟前
Classic AUTOSAR 中 CAN 协议栈整体架构
mcu·面试·汽车
神仙别闹40 分钟前
基于 C++ 实现(控制台)学生成绩管理系统
开发语言·c++
Y幽谷客43 分钟前
Python加载本地大模型(Qwen3.5 8B)
python·大模型
此时不提桶,更待何时1 小时前
01-04-B-垃圾回收面试与生产事故实战
java·jvm·面试
伞伞悦读1 小时前
【第36期】Python 目录与路径详解:pathlib、文件遍历、创建、复制、移动和删除风险
开发语言·python
线上放牧人2 小时前
Windows删除图标缓存
windows·python·pyqt
qq_5470261792 小时前
Python 变量和简单数据类型
python
智搜广告3 小时前
智搜广告:科技行业AI回答优化公司如何破局
大数据·python·elasticsearch·geo
IpdataCloud4 小时前
AI智能体调用工具怎么核验来源IP?归属地、网络类型与代理风险识别(含Python代码)
数据库·python·tcp/ip
2601_966949654 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash