RSS
菜单
社区成员个人主页
阿成员
DEV CN / 成员主页

阿青 · 社区话题账号

查看阿青 · 社区话题账号发布的技术文章、关注圈子与公开讨论。

0技术文章4关注圈子467圈内发布1关注者
COMMUNITY POSTS

交流圈发布内容

作者在不同技术圈子中的观点与讨论

1
# Python

Python 字典 dict 的底层实现?为什么查找快?

CPython 3.6+ 中 dict 是哈希表(indices + entries 分离式存储,3.7+ 保证插入顺序):通过 key 的哈希值定位桶,冲突用开放寻址法(线性探测)。查找/插入平均 O(1)。特点:① key 必须可哈希(不可变类型);② 3.7+ 保持插入顺序(实现细节转语言特性);③ 内存占用较大(稀疏)。优化:① 大量键时预估容量(避免 resize);② 用 collections.OrderedDict 需要…

2
# Python

Python 列表 list 的底层实现?为什么是动态数组?

CPython 中 list 底层是 PyListObject:指向连续内存的指针数组(ob_item),支持随机访问 O(1)。动态扩容:实际容量 > 长度,追加时容量不足触发扩容(约 1.125 倍增长,重新分配并拷贝),摊还复杂度 O(1)。特点:① 头部/中间插入删除 O(n)(移动元素);② 尾部追加高效;③ 存的是对象引用(可混合类型)。优化:预估大小避免频繁扩容;头部频繁操作用 collections.deque。

3
# Python

Python 的 warnings 模块和异常的区别?

异常:程序错误,中断执行流,必须被处理(try/except)或导致崩溃;warnings:非致命提示,默认打印到 stderr 不中断程序(显示一次后可按规则抑制)。用法:warnings.warn('msg', UserWarning);控制:warnings.filterwarnings、-W 命令行参数;常用类别:DeprecationWarning(弃用提示)、UserWarning、FutureWarning。应用:库作者提…

4
# Python

Python 的 assert 是什么?什么时候用?

assert 条件, 信息:条件为 False 时抛 AssertionError。用途:① 开发期断言前置/后置条件、不变量(防御性编程);② 测试中验证结果。注意:① python -O 运行时 assert 会被移除(不要用它做权限校验、业务验证等必须执行的检查);② assert 失败是程序错误信号,不是用户输入校验(输入校验用显式 if + raise ValueError);③ 不要用 assert 做数据校验。

5
# Python

Python 的 try 中 return 与 finally 的执行顺序?

finally 一定会执行(除非进程被杀/死循环/SystemExit 特殊处理),且先执行 finally 再返回:try 中 return x 时,先求值 return 表达式,保存返回值,执行 finally,最后真正返回。注意:① finally 中若也有 return,会覆盖 try 的返回值(应避免);② finally 中抛异常会覆盖原异常;③ 函数无 try 的 return 与 finally 同理。这是经典面试题:d…

8
# Python

Python 的模块与包怎么组织?__init__.py 作用?

模块 = .py 文件;包 = 含 __init__.py 的目录(3.3+ 命名空间包可无该文件,但常规仍用)。__init__.py 作用:① 标记目录为包;② 包初始化代码(导入时执行);③ 控制对外暴露:__all__、from .sub import X 便捷导入;④ 版本号等包级元数据。组织规范:包内避免循环导入;__init__.py 保持轻量;用绝对导入为主。工具:__package__、__name__ 判断入口。

9
# Python

Python 的 __slots__ 是什么?有什么好处?

__slots__ = ('name', 'age') 声明类只允许这些属性,禁止动态添加其他属性(否则 AttributeError)。好处:① 节省内存——每个实例不再有 __dict__(可省大量内存,百万级对象场景显著);② 属性访问更快。代价:① 不能动态加属性(灵活性降低);② 需要 __dict__ 时显式加入 __slots__;③ 继承时子类也要定义 __slots__ 才生效;④ 默认不参与弱引用(可加 '__wea…

10
# Python

Python 的抽象类 ABC 怎么用?

from abc import ABC, abstractmethod。抽象类 = 不能实例化、定义抽象方法的基类:class Animal(ABC): @abstractmethod def speak(self): ...。子类必须实现全部抽象方法才能实例化,否则报 TypeError。作用:① 定义接口契约(多态);② 模板方法模式骨架;③ 检查 isinstance。也可用 @abstractmethod 装饰属性。替代:鸭子类…