当前位置: 首页 > news >正文

Python面试问题

一、Python 基础

1. Python 的特点

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

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

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

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

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

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

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

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

  • 浅拷贝:只复制对象的引用,内部元素共享。
  • 深拷贝:递归复制对象及其内部元素。
import copya = [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 = dataself.index = 0def __iter__(self):return selfdef __next__(self):if self.index >= len(self.data):raise StopIterationvalue = self.data[self.index]self.index += 1return 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 resultreturn 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 selfdef __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:yieldfinally:print("Exiting context")

4. 异步编程

  • 使用 asyncio 模块实现异步操作。
  • 示例:
import asyncioasync 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 arrpivot = 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) - 1while left <= right:mid = (left + right) // 2if arr[mid] == target:return midelif arr[mid] < target:left = mid + 1else:right = mid - 1return -1

四、Python 框架与工具

1. Django 与 Flask 的区别

特性DjangoFlask
复杂度全栈框架,功能强大微框架,轻量级
灵活性较低较高
适用场景大型项目小型项目或 API 开发

2. Pandas 常用操作

  • 读取 CSV 文件
import pandas as pddf = pd.read_csv('data.csv')
  • 数据筛选
filtered_df = df[df['age'] > 30]
  • 数据聚合
grouped_df = df.groupby('category').sum()

3. NumPy 常用操作

  • 创建数组:
import numpy as nparr = 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)

相关文章:

  • mac 基于Docker安装minio服务器
  • Qt开发:XML文件的写入与读取
  • 【设计模式】GOF概括
  • 23种设计模式 -- 工厂模式
  • Java—— Arrays工具类及Lambda表达式
  • 【JavaScript】if语句
  • 数据仓库建模:方法、技巧与实践
  • CH592/CH582 触摸按键应用开发实例讲解
  • 再看 BBR 到 BBRv3 的公平性改进
  • 【补题】ACPC Kickoff 2025 F. Kinan The Bank Robber
  • 三小时快速上手TypeScript之抽象类
  • Pytest-mark使用详解(跳过、标记、参数 化)
  • windows程序转鲲鹏服务器踩坑记【持续更新中】
  • 嘉黎县传统手工艺传承与发展交流会圆满举行
  • 3、CMake语法:制作和使用动态库和静态库
  • centos7使用yum快速安装Docker环境
  • openGauss DB4AI与scikit-learn模块对比探究
  • 大模型如何应对内容安全:原理、挑战与技术路径探讨
  • Vue 组件通信方式总览
  • 智能指针之设计模式6
  • 外交部官方公众号发布视频:不跪!
  • 外交部:印度香客赴中国西藏神山圣湖朝圣将于今年夏季恢复
  • 葛兰西的三位一体:重提并复兴欧洲共产主义的平民圣人
  • 特朗普将举行集会庆祝重返白宫执政百日,被指时机不当
  • 一季度公募管理规模出炉:44家实现增长,4家规模环比翻倍
  • 政治局会议:创新推出债券市场的“科技板”,加快实施“人工智能+”行动