当前位置:首页>python>Python效率提升必看:re.findall、groupby、abc、Enum等内置模块实战

Python效率提升必看:re.findall、groupby、abc、Enum等内置模块实战

  • 2026-10-11 07:14:56
Python效率提升必看:re.findall、groupby、abc、Enum等内置模块实战
Python 标准库是个大宝藏,但很多人只会用 os 和 sys。
今天挑了几个冷门但超实用的内置模块,用过的都说真香。

1. 用 re.findall 提取所有匹配

老一辈程序员(包括刚学三天的你)可能会这样写:

text = 'Call 123-456-7890 or 098-765-4321'numbers = []i = 0while i < len(text):    # 手动解析数字...    pass

其实标准库一句话就能搞定,而且不会掉头发:

import rephones = re.findall(r'\d{3}-\d{3}-\d{4}', text)print(phones)  # ['123-456-7890', '098-765-4321']

re.findall 返回所有匹配的字符串列表,是批量提取文本模式的利器。


2. 用 itertools.groupby 分组数据

刚学 Python 那会儿,谁还没写过这种又臭又长的分组代码?

data = [('A', 1), ('A', 2), ('B', 3), ('B', 4)]groups = {}for key, val in data:    if key not in groups:        groups[key] = []    groups[key].append(val)

后来我知道了 groupby,然后那段代码就进了回收站:

from itertools import groupbyfrom operator import itemgetter# 注意:数据必须先按分组键排序!for key, groupingroupby(data, key=itemgetter(0)):    print(key, list(group))

groupby 将连续相同键的元素分组。

注意:它只分组相邻元素,使用前必须先排序。


3. 用 abc 定义抽象基类

别笑,这个错误我见过不下二十次:

class Shape:    def area(self):        raise NotImplementedError# 忘了实现 area 也不会报错(直到运行时调用)

正确的姿势应该让 Python 在门口就把人拦住:

from abc import ABC, abstractmethodclass Shape(ABC):    @abstractmethod    def area(self) -> float: ...# Shape()  # TypeError: 不能实例化抽象类

ABC + abstractmethod 在实例化时就强制检查子类是否实现了所有抽象方法,比 NotImplementedError 更早发现问题。


4. 用 logging 替代 print 调试

不查文档的话,大部分人会这么干:

print('DEBUG: Starting process')print(f'INFO: Processing {filename}')# 上线时要删掉所有 print...

Pythonic 的写法长这样:

import logginglogging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s')logger = logging.getLogger(__name__)logger.info('Processing file')logger.warning('Disk space low')logger.error('File not found')

logging 支持级别控制,通过配置决定输出哪些级别,无需删代码,还能输出到文件、设置格式。


5. 用 enum 定义枚举类型

最常见的写法大概是这样的:

STATUS_PENDING = 0STATUS_ACTIVE = 1STATUS_CLOSED = 2if status == 1:    print('active')

换成这样就优雅多了:

from enum import Enum, autoclass Status(Enum):    PENDING = auto()    ACTIVE = auto()    CLOSED = auto()if status == Status.ACTIVE:    print('active')

Enum 让常量有类型、有名字、不可变,比裸常量更安全,不会拼错、不会比较不同类型的枚举。


速查表

场景别这样写试试这样
批量提取文本模式手动解析循环re.findall()
按键分组数据手动字典分组itertools.groupby()
定义接口规范raise NotImplementedErrorABC + @abstractmethod
调试输出print() 到处写logging 级别控制
定义常量裸数字/字符串Enum 枚举类

以上就是今天要安利的几个 Python 内置模块。

re.findall 让你告别手撕字符串,itertools.groupby 帮你把分组代码扔进历史垃圾桶,abc 让抽象类不再“抽象地出错”,Enum 把魔法数字赶出你的代码库。

最新文章

随机文章