📜 Фильтрация: старый подход
# old_filter.py
nums = [1, 2, 3, 4, 5, 6]
evens = []
for n in nums:
if n % 2 == 0:
evens.append(n)
print(evens)
Что здесь происходит: явный цикл for с проверкой и накоплением результата. Работает в любой версии Python, но занимает больше строк.
✅ Современный вариант
# modern_filter.py
nums = [1, 2, 3, 4, 5, 6]
evens = [n for n in nums if n % 2 == 0]
print(evens)
# или через filter + lambda
evens_lambda = list(filter(lambda n: n % 2 == 0, nums))
Что улучшилось: list comprehension короче и быстрее; filter + lambda явно говорит о намерении отфильтровать.
- Меньше визуального шума.
- Читаемость привычной операции фильтрации.
- list comprehension обычно работает быстрее, чем цикл с
append.
📜 Аннотации: стиль Python <3.9
# old_typing.py
from typing import Callable, List
def filter_evens(
predicate: Callable[[int], bool],
numbers: List[int]
) -> List[int]:
return [n for n in numbers if predicate(n)]
Что здесь происходит: generic-типы импортируются из модуля typing с заглавной буквы.
✅ Современный вариант (Python 3.9+)
# modern_typing.py
from typing import Callable
def filter_evens(
predicate: Callable[[int], bool],
numbers: list[int]
) -> list[int]:
return [n for n in numbers if predicate(n)]
Что улучшилось: встроенные типы list[int] читаются естественнее и не требуют лишних импортов.
📜 Сортировка: функция-ключ вручную
# old_sort.py
words = ["apple", "banana", "kiwi", "grape"]
pairs = []
for word in words:
pairs.append((len(word), word))
pairs.sort()
sorted_words = [word for _, word in pairs]
print(sorted_words)
Что здесь происходит: создаётся список пар «ключ, значение», сортируется по первому элементу пары, затем извлекаются значения.
✅ Современный вариант
# modern_sort.py
words = ["apple", "banana", "kiwi", "grape"]
sorted_words = sorted(words, key=len)
print(sorted_words)
Что улучшилось: функция sorted с key= делает то же самое в одну строку. Код понятнее и меньше подвержен ошибкам.
🕰️ Когда старый подход ещё встречается
- Кодовые базы на Python 3.7–3.8, где встроенные generic-типы недоступны.
- Учебные материалы, объясняющие внутреннее устройство фильтрации.
- Ситуации, когда нужна дополнительная логика внутри цикла, которую сложно выразить через
filterили comprehension.