Ответ
Модуль collections
в Python содержит высокопроизводительные типы данных, некоторые из которых поддерживают принципы функционального программирования, такие как иммутабельность и декларативность.
Ключевые инструменты:
-
namedtuple
: Фабрика для создания классов кортежей с именованными полями. Это повышает читаемость кода и позволяет создавать легковесные иммутабельные структуры данных, что является основой ФП.from collections import namedtuple # Создаем иммутабельный тип данных Point = namedtuple('Point', ['x', 'y']) p1 = Point(10, 20) print(p1.x) # Доступ по имени, а не по индексу # p1.x = 30 # Вызовет AttributeError, так как кортежи иммутабельны
-
Counter
: Специализированный подкласс словаря для подсчета хешируемых объектов. Упрощает агрегацию данных, позволяя писать более декларативный код.from collections import Counter # Декларативный подсчет элементов без циклов и условий data = ['apple', 'orange', 'apple', 'banana', 'orange', 'apple'] fruit_counts = Counter(data) print(fruit_counts) # Counter({'apple': 3, 'orange': 2, 'banana': 1})
-
defaultdict
: Подкласс словаря, который вызывает фабричную функцию для предоставления значений по умолчанию для отсутствующих ключей. Это упрощает код группировки и агрегации, устраняя необходимость в ручных проверках ключей.from collections import defaultdict # Группировка данных без проверки наличия ключа s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)] d = defaultdict(list) for k, v in s: d[k].append(v) print(d) # defaultdict(<class 'list'>, {'yellow': [1, 3], 'blue': [2, 4], 'red': [1]})
Хотя defaultdict
и Counter
являются изменяемыми, они предоставляют высокоуровневые абстракции, которые помогают писать код в функциональном стиле, фокусируясь на трансформации данных, а не на деталях реализации.