Тут немножко конвертирую HTTP заголовок в dict заголовков для requests.
{x.split(': ')[0]:x.split(': ')[1] for x in header.split('\n') if ': ' in x}
- вполне годный генератор, делает то, что мне нужно, но, сцуко, ПОЧЕМУ ЭТОТ КОД ТАК ОТВРАТНО ВЫГЛЯДИТ???? Почему среди тупого, как паскаль Вирта, кода какая-то обратная польская запись или написанный Йодой код? Я не хочу джедаить, я хочу ровно писать код, как рисовать диаграммы.
Почему нельзя сделать генератор, похожий на
dict = (
while
x=get(header.split('\n'))
return(x.split(': ')[0]:x.split(': ')[1])
)
или типа того? Или это мне пора учить лисп?
В sql есть подзапросы, почему вместо лямбд и генераторов не делать «подпрограммы» посреди кода?
И где здесь проверка, которая в оригинале if ': ' in x?
Если без неё, то те же яйца, только в профиль. Как по мне, примерно одинаково [не]читаемо.
У тебя там одно двоеточие вообще на строку, или несколько может быть, и после второго вообще всё отбрасывается? Просто если не отбрасывается, и смысл имеет только первое двоеточие, то так:
dict(x.split(": ", 1) for x in header.split('\n'))
Код и правда выглядит отвратительно, но у меня подозрение что в этом вся суть питона, который идеологический наследник перла, хоть и основательно переделанный.
А вообще у тебя там целых два бага.
cookie:a=b: c: d
Правильно это парсить как заголовок Cookie, в котором передана переменная a, равная b: c: d, а у тебя оно распарсится в заголовок cookie:a=b с содержимым c, а последние 3 символа вообще потеряет вникуда.
Какая разница? Я для примера привёл, можешь любое другое название заголовка подставить. У тебя некорректно обрабатываются пробелы (которых после двоеточия может быть любое количество начиная от нуля, а так же вроде и до разрешены) и некорректно обрабатываются двоеточия в значении.
Потому что Питон – говно, где ничего ни чем не комбинируется by design и поэтому приходится выдумывать вот такие костыли на каждый чих.
Почему нельзя сделать генератор, похожий на
Почему нельзя? Можно, если запихать это в функцию. А ещё лучше каждую операцию на отдельной строке. Добро пожаловать в квадратно-гнездовое программирование.
headers = [[Server: QRATOR
Date: Wed, 29 Oct 2025 21:41:07 GMT
Content-Length: 0
Connection: keep-alive
Keep-Alive: timeout=15
Location: https://www.linux.org.ru/]]
results = { }
pattern = '(.-):%s+(.-)\n'
-- почему типа такого не написать?
for k,v in headers:gmatch(pattern) do
results[k] = v
end
-- или можно типа такого
headers:gsub(pattern,function(k,v)
results[k] = v
end)
Это Lua если что, но наверняка можно тож самое в питоне
мне кажется вот это {for x in blabla} создано для генерации
простых данных типа как в баше {1..100} и типа того, но не для
впихования туда всего и вся, разбей операции на последовательности
и всё будет читаться нормально ^.^ тююю