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)

相关推荐
拉不动的猪21 分钟前
前端常见数组分析
前端·javascript·面试
PXM的算法星球35 分钟前
【软件工程】面向对象编程(OOP)概念详解
java·python·软件工程
CodeWithMe37 分钟前
【C++】线程池
开发语言·c++
专注API从业者1 小时前
《Go 语言高并发爬虫开发:淘宝商品 API 实时采集与 ETL 数据处理管道》
开发语言·后端·爬虫·golang
Humbunklung1 小时前
PySide6 GUI 学习笔记——常用类及控件使用方法(常用类矩阵QRectF)
笔记·python·学习·pyqt
蹦蹦跳跳真可爱5891 小时前
Python----深度学习(基于DNN的吃鸡预测)
python·深度学习·dnn
欧先生^_^2 小时前
Scala语法基础
开发语言·后端·scala
hu_yuchen2 小时前
C++:BST、AVL、红黑树
开发语言·c++
炯哈哈2 小时前
【上位机——MFC】视图
开发语言·c++·mfc·上位机
我也不曾来过12 小时前
继承(c++版 非常详细版)
开发语言·c++