Однострочный фетишизм 🤖

Сегодня у нас очередная попытка впихнуть невпихуемое в одну строку, найденная на просторах интернета. Глядя на это, линтеры не просто ругаются — они выпиливают себя с вашего устройства.

with open("t") as f:print(sum([sum([float(m) for m in "".join(filter(lambda x:x.isnumeric() or x.isspace() or x==".",l)).split()]) for l in f.readlines()]))


🧐 Что здесь происходит?
Автор этого «шедевра» поставил себе задачу: извлечь все числа из текстового файла и просуммировать их.

Почему это вызывает физическую боль?
1️⃣ Память — не резиновая. f.readlines() вываливает весь файл в RAM. Если файл на 10 Гб — ваш сервер скажет «пока» быстрее, чем вы дочитаете этот пост.
2️⃣ Посимвольная фильтрация через lambda. Склеивать строку по одному символу через "".join(filter(...)) — это самый медленный способ обработки строк в Python. Мы тут программируем или бисер перебираем?
3️⃣ Вложенные списковые включения. Читаемость на уровне египетских иероглифов. Чтобы понять, где закрывается скобка, нужно вызвать экзорциста.
4️⃣ PEP8 вышел из чата. Отсутствие пробелов после : и вокруг операторов — это не экономия места, это неуважение к окружающим.

Итог: Мы получили код, который работает медленно, жрет память и абсолютно нечитаем.

Как это сделать по-человечески?
Если вам нужно вытащить числа из текста, для этого существуют регулярные выражения.
Вот как этот код должен выглядеть в мире здорового человека:

import re

def total_sum_from_file(file_path: str) -> float:
total = 0.0
# Используем контекстный менеджер и итератор по строкам
with open(file_path, 'r', encoding='utf-8') as f:
for line in f:
# Ищем все, что похоже на число (целое или с точкой)
numbers = re.findall(r"[-+]?\d*\.\d+|\d+", line)
total += sum(map(float, numbers))
return total

print(total_sum_from_file("t.txt"))


Почему так лучше:
1. Читаемость: Даже джун поймет, что здесь происходит, за 5 секунд.
2. Память: Мы читаем файл построчно. Если файл весит 10 Гб, этот код не упадет.
3. Скорость: re.findall на уровне C работает быстрее, чем ваш посимвольный фильтр на Python.

#код_курильщика