Гвидо ван Россум (Guido van Rossum) представил на рассмотрение сообществом черновик спецификации для реализации в языке Python операторов для сопоставления с образцом (match и case). Следует отметить, что предложения по добавлению операторов сопоставления с образцом уже публиковались в 2001 и 2006 годах (pep-0275, pep-3103), но были отвергнуты в пользу оптимизации конструкции "if ... elif ... else" для составления цепочек сопоставления...Подробнее: https://www.opennet.me/opennews/art.shtml?num=53248
Не прошло и полвека…
> но были отвергнуты в пользу оптимизации конструкции "if ... elif ... else" для составления цепочек сопоставления.Сначала героически отвергли, потом героически ввели... Ну и кто они после этого?!
> Сначала героически отвергли, потом героически ввели...Они героически отвергли C-style свитч. А героически ввели Scala-style match.
> Ну и кто они после этого?!
Стратеги. Если бы они приняли C-style свитч тогда, а сейчас добавили бы match, то ортогональность фичей языка пошла бы лесом. И окультурить этот лес селективными вырубками не удалось бы из-за backward compatibility.
Ну да, а две конструкции по итогу иметь - бог не позволяет.
> Ну да, а две конструкции по итогу иметь - бог не позволяет.Ну да, примерно так и есть.
1) А зачем засорять язык, если можно не засорять?
2) Бритва оккама
3) Вообще-то у белкового мозга есть лимит возможностей в том, сколько правил можно одновременно соблюдать и эффективно добиваться поставленных целей
Категорически неверно. "Засорять" - это когда маловажные перделки и "сахарок" добавляются тоннами - как в C# 9.0; А отдельный свич и матч были бы неплохим разделением: когда прогер использует свич, он чётко знает - это БЫСТРО и используем сплошные константы - компилятор легче генерирует оптимальный код. Если это матч - компилер уже знает, надо долго и нудно сопоставлять. И это хорошо.
Python этим то и хорош, что не тащить всякий мусор в виде дублирующих операторов!
Посмотрите что с С++ сотворили, чужие исходники читать трудновато.
Меньше операторов это главное что отличает современные языки вроде Go, Rust в результате читаемость чужих исходников резко повышается!
> дублирующих операторовНа вскидку: elif, for/while
> Меньше операторов
Нет. Не операторов меньше. В go например есть и if и switch.
Уменьшают базовую бибилиотеку: никто не тащит в стандарт например парсинг cvs и т.д. Не потому что не могут, а потому что и сторонние разработчики хорошо справляются. Лучше сделать хороший пакетный менеджер, чем поддерживать зоопарк фичей.
Нафига две-то? Скриптовый язык, по определению, имеет "умные" операторы. А не "тупо" транслирует в машинный код.
Сделали бы сразу switch, а потом наворачивали на него поддержку таплов, регэкспы и прочее и прочее
> ортогональность фичей языка пошла бы лесомона и так пошла лесом, то, что делалось ифом, сейчас ещё и мачем.
>> ортогональность фичей языка пошла бы лесом
> она и так пошла лесом, то, что делалось ифом, сейчас ещё и
> мачем.Да. Но match удобнее на некоторых случаях. Это во-первых сокращение записи (попробуй вон тот пример с Point переписать на if/elif), во-вторых, match -- это специфический синтаксис, который легко детектируется глазом, после чего ты понимаешь что происходит дальше. Цепочка if/elif может развиваться как угодно, match x -- это как цепочка if/elif по значению x.
Если мы сравниваем switch и if/elif, то это сравнение будет выглядеть примерно так же, как сравнение match и if/elif. Точнее, на качественном уровне так же, а количественно выйдет иначе несколько: меньшее количество юзкейсов для switch, меньше экономия в размере сорца. То есть, switch может быть и имело смысл принять, при отсутствии match'а. Тут вопрос в той количественной планке полезности для новой фичи, которую для себя установили разработчики.
Но иметь в языке и switch, и match -- это совершенно не аргументируемая идея. match может всё то, что может switch, при этом switch будет не длиннее аналогичного match.
> не удалось бы из-за backward compatibility.Не забываем что разговор о питоне.
Насмешили!
Многоходовочка от Гвидо! Всех переиграл!Питон это помойка некогерентного синтаксиса с семантикой бейсика.
> Насмешили!Я рад.
> Многоходовочка от Гвидо! Всех переиграл!
Нет. Многоходовочка -- это когда план был составлен априорно. Здесь же, ситуация иная, switch был отвергнут из общих соображений, а не потому, что кто-то планировал впоследствии добавить match.
> Питон это помойка некогерентного синтаксиса с семантикой бейсика.
Совершенно нерелевантный обсуждению кусок информации. Твоё отношение к python'у никому не интересно.
Секреты интриги расследования. Тонкое стратегическое мышление в развитии скриптов для домохозяек.Мои бока.
Не знал что у Питона есть секта фанатиков в рунете которые на полном серьезе интересуются "полезной" "политинформацией" о тонкостях решений закулисами так сказать.
Еще и инфантильное тыканье, вы студент? Или Школьник может? Не примите за оскорбление, а то многие на школьника обижаются почему-то. Это нормально ведь, в школе учиться. Только питон там зря преподают. Раньше паскалю учили.
Ну и с чего вы взяли, что можете релевантность чего-либо определить? Ну будь вы хоть Гвидо этим, еще понятна была бы такая напыщенность. Но вот лично вы, никакого отношения к успехам питона не имеете.
> Не знал что у Питона есть секта фанатиков в рунете которые на полном серьезе интересуются "полезной" "политинформацией" о тонкостях решений закулисами так сказать.
> Еще и инфантильное тыканье, вы студент? Или Школьник может? Не примите за оскорбление, а то многие на школьника обижаются почему-то. Это нормально ведь, в школе учиться. Только питон там зря преподают. Раньше паскалю учили.Я бы встречно предположил, что студент тут ты: искать (и находить!) секретные группы людей интересующихся несуществующей "полезной" "политинформацией" -- это вообще, мне кажется, особенность интеллекта на определённых этапах развития. Многие интеллекты застревают на этой стадии на всю оставшуюся жизнь, но те кто постарше студенческого возраста успели уже набить шишек и научились держать при себе совсем уж безбашенные находки.
Можно я раскрою тебе глаза? Я до сегодняшнего дня не знал о том, что в python кто-то когда-то пытался протолкнуть switch. И о попытках протолкнуть match не слышал. И, если честно, если бы меня спросил кто вчера, есть ли в python'е switch или match я бы затруднился ответить, потому как python'ом я пользуюсь весьма эпизодически и поэтому не помню деталей. Но мнение по обсуждаемому вопросу я, тем не менее, имею: я его составил по результатам прочтения данной новости и диагонального листания некоторых ссылок из новости и комментов. Тут есть ссылки на обсуждение предложения внести switch -- и если ты глянешь туда, там нет никакой "политинформации", там чисто техническое обсуждение. Обсуждение match'а тоже не содержит в себе "политинформации". То есть "политинформация" является чистым и незамутнённым продуктом твоей фантазии, от которого ты бодро перепрыгиваешь к выводу о существовании несуществующей группы людей. Даже не замечая того, что вся эта твоя психическая деятельность протекает в выдуманной тобою Вселенной, существующей только в твоей голове.
> Ну и с чего вы взяли, что можете релевантность чего-либо определить?
Ой, ну это же легко. Ты перечитай тред. О чём он? Тред о принятии match и о предшествующем непринятии switch. И тут ты такой красивый пришёл трясти своим личным мнением о python'е.
Эк вас прёт.
Извините, нет абсолютно времени в подобной мути разбираться.
А отсутсвие чувства юмора и самокритики конечно беда страшная.
> Эк вас прёт.
> Извините, нет абсолютно времени в подобной мути разбираться.
> А отсутсвие чувства юмора и самокритики конечно беда страшная.Ну да, давай, демонстрируй нам свою способность уходить в кристаллизованный ad hominem, когда других аргументов придумать не удаётся. Попробуй научиться сливаться в cpaчах без ad hominem: очень полезное умение, особенно для студента.
Говорить о себе в третьем лице это клиника.
А можно для идиотов объяснить в чём принципиальное отличие? Я по коду особой разницы не вижу.
Они сами не могут объёснить, как 30 лет жили без мачи, а теперь вдруг ввели её себе в голову.
> А можно для идиотов объяснить в чём принципиальное отличие? Я по коду
> особой разницы не вижу.def whereis(point):
match point:
case Point(0, 0):
print("Origin")
case Point(0, y):
print(f"Y={y}")
case Point(x, 0):
print(f"X={x}")
case Point():
print("Somewhere else")
case _:
print("Not a point")C-style switch позволяет использовать в качестве переключателей лишь константы примитивных типов. Здесь же используются не константы и не примитивных типов. Здесь используются паттерны. Например, case Point(0,y), под этот паттерн подпадёт любой Point у которого x==0. Но мало того, match создаёт лексический биндинг: он связывает переменную y со значением point.y.
Каждый паттерн здесь (за исключением _), проверяет что point имеет тип Point, плюс какие-то дополнительные условия на значения x и y накладывает. switch так не умеет. if/else/elif позволяет такое сделать, но там получится мешанина вложенных if'ов.
затем:
match point:
case Point(x, y) if x == y:
print(f"Y=X at {x}")
case Point(x, y):
print(f"Not on the diagonal")демонстрируешь ещё одну фишку, доп. условия. Первый case сработает если point имеет тип Point и point.x == point.y. Обрати внимание, тут тоже происходит создание локальных переменных x и y, и они доступны в if'е.
Да, всего 10 лет осталось - ML в 79м придумали.
Регулярки-то можно будет запихнуть туда? Реальный юзкейс. xDНо да, не хватало для счастья именно этого. Ну, среди прочего. Эх, ещё бы := в ф-строки пихать разрешили... Или это уже перебор?
Правда, как сахар для if не очень полезно, наверное. Лучше бы чем-нибудь полезным занимались.
Вполне себе полезно, т.к. подобные конструкции через if выглядят не по питоновски. Одно из немногих за последнее время изменений делающих питон более питоном, остальное в другую сторону, по большей части.
Иногда словарь помогает. Но всё зависит от сравниваемых данных.
> Иногда словарь помогает. Но всё зависит от сравниваемых данных.По-моему со словарём были проблемы с тормозами и перерасходом памяти. Последнее частично исправлялось различными костылями. Я уже не знаю что такое питоновый питон. Сначала привыкаешь к 1 питону, потом привыкаешь к постоянным изменениям, потом уже шпаришь со всеми новыми фичами -- ведь они стабильно повышают удобство и качество жизни. Решение оставить на плаву 2 питон в течение такого срока было совершенно фатальным, теперь нужно навёрстывать.
Питон это красивый ясночитаемый код, в первую очередь, для тех кому нужно. В этом сила этого языка - писать быстро, читать легко, даже чужое. Остальное либо производное от этого, либо является минусом.
Потому - более по-питоновски, по моему мнению, это все, что угодно в пользу этого факта. Последнее время конструкции языка усложняются и вообще местами напоминают натягивание совы на глобус, мне не сложно, мне непонятно нафига.Драма перехода на три это как застиранное пятно от кофе на рубашке определенной репутации языка. Никуда оно уже не денется, странно, что вы с ней ещё носитесь.
> Питон это красивый ясночитаемый код, в первую очередь, для тех кому нужно.
> В этом сила этого языка - писать быстро, читать легко, даже
> чужое. Остальное либо производное от этого, либо является минусом.
> Потому - более по-питоновски, по моему мнению, это все, что угодно в
> пользу этого факта. Последнее время конструкции языка усложняются и вообще местами
> напоминают натягивание совы на глобус, мне не сложно, мне непонятно нафига.Возьмите луа, если вам так хочется. На мой взгляд, чем сложнее и мощнее язык, тем быстрее писать, тем проще воплощать мысли в коде. Питон не теряет в простоте и человекочитаемости от подобных нововведений, только выигрывает. Он не становится менее понятным при этом, в основном он просто позволяет выкинуть лишные некрасивые конструкции и упростить сопровождение кода.
- "Питон это красивый ясночитаемый код"Прекрати человек анекдот.
вопрос решите и обоснуйте решение
4/2(4-2)
а то развелось тут "специалистов по всему" лин
> вопрос решите и обоснуйте решение
> 4/2(4-2)
> а то развелось тут "специалистов по всему" линОтвет - синтаксическая ошибка, внезаптные скобки после числа.
> вопрос решите и обоснуйте решение
> 4/2(4-2)
> а то развелось тут "специалистов по всему" линУ вас невалидный ввод. Неожиданные символ "(" после "2"
Скорей, конечно, надо читать: "предложенные выглядят более по питоновски", так правильно
В каком-нить экзотическом Парсер (Parser3/parser.ru) - конструкция switch - case/default почти 20 лет из коробки, и ооочень широко используется для опциального ветвления, без нее тяжко, пример в топике актуальный.
"Добрый день, к вашим услугам питон-разработчик, слонёнок-тестер и мартышка-тимлид" (c)
>ещё бы := в ф-строки пихать разрешилиловите наркомана.. надеюсь такие побочные эффекты никогда в язык не пролезут - жаль что в принципе это присваивание просочилось.
Ну так сейчас их в .format() класть приходится, было бы удобней и менее грязно сразу на месте. А так приходится отказываться от продвинутых эффективных строк. Нет, не жаль, такое присваивание позволяет писать более эффективные однострочники.
это первый шаг в сторону перла имхо
Уже есть := конструкция доки читайте
> Регулярки-то можно будет запихнуть туда? Реальный юзкейс.Вот так хочешь?
for ($var) {
/regex1/ ? do_something() :
/regex2/ ? do_something_other() :
default_action();
}Так очень даже запросто. Только гвидобейсик придётся выкинуть…
Да блин, в питоне синтаксис итак перегружен, столько всяких конструкций, за один день не разберёшься со всем, а он ещё хочет усложнить 😢
Могу предложить Brainfuck, там простеиший синтаксис
В брейнфаке плохо реализовано ООП )
А оно там ваще есть?
Есть, конечно. Он же тьюринг-полный.
ООП есть везде, где есть процедуры и данные. Главное, чтобы не развился ООП головного мозга.
Чисто теоретически ООП, это набор самоограничений, позволющий осиливать сложность ПО. Если нет классов, то можно их реализовывать например на уровне подключения файлов. Или придумать любой свод правил на том что есть =)
А как на одних только процедурах и данных реализовать инкапсуляцию, наследование, полиморфизм?
> В брейнфаке плохо реализовано ООП )По-моему, там просто отличное ООП! ))
Похоже, изучение ООП надо начинать с ассемблера. Вот тогда в мозгах будет правильный ООП. Как напишет хомячок на асме VMT, так сразу будет знать, что это такое.
Это на и сишечке сделать несложно. Зачем же из пушки по воробьям то стрелять?
_ - не улучшит читаемость кода. Улучшит её default: как например в C#
Это не по-питоновски. Чем менее понятно, что происходит, тем более питоновской является конструкция.
Да скоро до башевских реулярок так дойдем.
Опять какое-то школоло вылезло… Нет в баше регулярок. Никаких. И никогда не было.
Господи, откуда вы лезете? А что делает оператор =~ в баше?
OMG, они и это туда запилили? Ладно, был неправ, прошу прощения.
Этот коммент глаголит мудрость.
дефолт еще хуже, потому что новое ключевое слово. понимаю - в шарпах об этом совсем не парятся, но в питоне стараются сделать еще и красиво(минимализм рулит) надеюсь else будет (для симметрии с try/for/if).
> в питоне стараются сделать еще и красивоСубъективщина. Не считаю гвидобейсик "красивым".
> минимализм рулит
Тогда иди в Brainfuck.
>Субъективщинатут не спорю
мне кажется очевидный факт что чем меньше ключевых слов - тем лучше для языка при одинаковом наборе фичей. это и есть продуманность и согласованность их(фич) друг с другом
Минимализм - это к Lua. А тут попытка усидеть на двух стульях.
>А тут попытка усидеть на двух стульях.и надо признать что у них весьма не дурно это получается, судя по всем рейтингам и такой широкой области применимости - наверное даже самой широкой
Успех питона несвязан с техническими свойствами языка.
Он экономический и политический.
сильное заявление, требующие доказательства. хотел бы узнать более развернуто почему питон по-вашему популярен. да - у питона много недостатков, но остальные языки имеют их еще больше(не говорю за хаскели/эрланги и прочие кложуры, потому как не работал с ними плотно)
Хотелось бы.Что скажите кстати насчёт Лавкрафта? Читали?
_ традиционно используется в языках, где петтерн-матчинг имеется изначально.
И очень зря.
Да... зрят в корень.))
В Python даже для for и while есть else, логично использовать его и здесь.
Гвидо вместо того чтобы повелеть своим диктаторским решением, выставил на рассмотрение? Куда катится этот мир.
Он уже не диктатор, и даже из Dropbox ушёл на пенсию. Ты всё проспал.
https://www.opennet.me/opennews/art.shtml?num=48959
https://www.opennet.me/opennews/art.shtml?num=51778
В мавзолей ему пора.
> Гвидо вместо того чтобы повелеть своим диктаторским решением,
> выставил на рассмотрение? Куда катится этот мир.я надеюсь, ему велят катиться со своим очередным switch - "голым сували и будем сувать, вези еще elifов!"
хотя, попытка с '_' хороша своей полной нечитаемостью. Так что может в этот раз и прокатить.
Я так понимаю, что '_' пересекается с распространённой
практикой использования '_' как локальной переменной?
Есть такие, кто сходили почитать pep-3103? В этих четырёх вариантах синтаксиса новой конструкции вся убогость Пихтона как на ладони. А еще Перл им, понимаешь, не нравится… :-)
Perl можно во многом обвинять, но в синтаксисе он топовый. Все таки лингвист создавал.
Конечно если не писать специально "типичные программы на perl".
Почему просто switch не добавить? Если оно выглядит как switch, крякает как switch, то это switch.
Назвав конструкцию match, они и провоцируют вопрос, заданный выше, про регулярки.
Тоже сначала подумал, что наконец-то оператор регулярок сделали... Ан нет, сделали по пи... по питоновски, "никакулюдей", "яойсобенная".
Вот настоящий match.
let eq_rat cr =
match cr with
((_,0),(_,0)) -> true
| ((_,0),_) -> false
| (_,(_,0)) -> false
| ((n1,1), (n2,1)) when n1 = n2 -> true
| ((n1,d1), (n2,d2)) when ((n1 * d2) = (n2 * d1)) -> true
| _ -> false;;
let char_discriminate c =
match c with
'a' | 'e' | 'i' | 'o' | 'u' | 'y'
| 'A' | 'E' | 'I' | 'O' | 'U' | 'Y' -> "Vowel"
| 'a'..'z' | 'A'..'Z' -> "Consonant"
| '0'..'9' -> "Digit"
| _ -> "Other" ;;
https://caml.inria.fr/pub/docs/oreilly-book/html/book-ora016...
На тридцати языках: https://rosettacode.org/wiki/Pattern_matching
> На тридцати языках: https://rosettacode.org/wiki/Pattern_matchingПример с инстанциацией шаблонов просто шикарен, зря что ли Александреску ушёл в D. :D
Полез в Википедию, был удивлён: в англоязычном варианте https://en.wikipedia.org/wiki/Pattern_matching
среди первых языков, где реализовано сопоставление я образцом (SNOBOL from 1962, Soviet language Refal from 1968 with tree-based pattern matching, SASL from 1976, NPL from 1977, and KRC from 1981)
указан РЕФАЛ, а в русскоязычном про него ничего нет (в РЕФАЛ через сопоставление реализуется вообще всё).
Крякает он как раз как match, судя по выражению "case Point(x, y) if x == y", такое никакой switch провернуть не сможет.
> Крякает он как раз как match, судя по выражению "case Point(x, y)
> if x == y", такое никакой switch провернуть не сможет.Спасибо, проглядел if.
Это вообще синтаксический ад какой-то, честно говоря.
Для такого надо или ИЛИ пихать или не делать такое вообще.
> Если оно выглядит как switch, крякает как switch, то это switch.Не совсем.
match это по идее выражение, оно возвращает один из подошедших вариантов,
switch - это как правило стейтмент (поправьте, как правильно говорить), который ничего не возвращает, еще и проваливается сверху-вниз если break не поставить.
Кстати, в каком-то языке я встречал возвращающий switch. Выглядело (условно) это как-то так:
int r = switch (op)
{
case '+': a + b;
case '-': a - b;
case '*': a * b;
case '/': a / b;
};
> Кстати, в каком-то языке я встречал возвращающий switch. Выглядело (условно) это как-то
> так:c#8
public static T RecursiveExample<T>(IEnumerable<T> sequence) =>
sequence switch
{
System.Array { Length : 0} => default(T),
System.Array { Length : 1} array => (T)array.GetValue(0),
System.Array { Length : 2} array => (T)array.GetValue(1),
System.Array array => (T)array.GetValue(2),
IList<T> list => list[2],
IEnumerable<T> seq => seq.Skip(2).First(),
};
ужас какой-то... кто это использует?!
Прикол же, чисто демонстрационный. В реальности действительно приятная вещь... знакомая, по сути, всем любителям функционального программирования. ;)
> Почему просто switch не добавить?Потому что это не switch. Читайте pep.
> Назвав конструкцию match, они и провоцируют вопрос, заданный выше, про регулярки.
Да, существуют граждане, закомящееся с языком как-то по basic-english словарю и ключевым словам...
Но если делать язык в расчете на подобных, выражусь политкорректно, идиотов - получится язык для идиотов.
Так уже получился.
А мне нравится, очень хорошо читаемая конструкция, я лично за.Меня лично эти if-elif-else в питоне всегда бесили, предпочитаю вместо них словари, но это тоже адский костыль и не всегда удобнее.
Самый лучший способ улучшить читаемость программ - нигде не использовать питон....
У меня, как и у многих, тоже возник вопрос "А где ты раньше был", но вроде бы штука удобная, м.б. лучше поздно, чем никогда? (Дисклеймер: не питонист ни разу)
> У меня, как и у многих, тоже возник вопрос "А где ты раньше был",Мировоззрение меняется просто. Может он поиспользовал эту конструкцию в других языках и понял, что удобно.
> case Point():Это выглядит как создание объекта со значением по умолчанию, почему оно должно совпасть с любым другим значением не совсем ясно.
Это питон. Не ищите нормального синтаксиса там, где его нет.
> почему оно должно совпасть с любым другим значением не совсем ясноКак я понимаю оно совпадает с произвольной точкой (в смысле не с (0, 0), (x, 0) или (0, y)). Любое другое значение - это _.
Вопрос, как я понимаю в том, почему используется синтаксис Point(), а не Point(_, _).
точно (_,_). Везде в питоне (_,_).
Да, странно. Особенно, учитывая, что конструктор Point требует 2 аргумента.
Может я что то в жизни не понимаю, но ООП для этого вроде и придумали что бы не пихать новый синтаксис, а создавать "новые" комманды на основе классов, для языка.
Определенно не понимаешь, ООП придумали, чтобы книжки таким как ты продавать.
ООП придумали чтобы снизить порог вхождения. Объекты со свойствами и наследованием принять проще, чем непонятные регистры и слабо укладывающиеся в голове математика «функции».
+5. А математики в своей голове хоть что-то уложить - могут?
> В отличие от оператора "switch", доступного в языках Си, Java и JavaScript,JFI для JS уже очень давно висит аналогичное предложение https://github.com/tc39/proposal-pattern-matching
> Также вызывают вопросы внутренняя организация, основанная на трансляции новых выражений в байткод, аналогичный используемому для конструкций "if ... elif ... else", что не обеспечит желаемой производительности при обработке очень больших наборов сопоставлений.думаю, тут дело в первую очередь про удобство, а не производительность. Ибо "if ... elif ... else" ацки неудобная. Очень не хватает switch/case
> Ибо "if ... elif ... else" ацки неудобная.30 лет с ифом жили, и тут - бац! - прям озарило...
Это тот switch, в котором практически для каждого case нужно рисовать break? Спасибо не надо.
Сделай switch, в котором не надо рисовать break. Но можно нарисовать fallthrough при необходимости. Ой, нет, так уже другие люди сделали…
Начнёшь писать программы - поймёшь, почему где-то нужен break, а где-то - нет.
Хочет дотянуть функционал петона до уровня bash?
конечно, а то раньше-то он не был тьюринг полным
Лучше верни master/slave, идиотизм какой-то потакать 0.01% извращенцев и менять веками устоявшиеся конструкции.
Петончик как модный хайповый язык не может не потакать 0.01% извращенцев. Страдайте.
> Петончик как модный хайповый язык не может не потакать 0.01% извращенцев. Страдайте.
>>> предложил включить в Python операторы для сопоставления с
>> менять веками устоявшиеся конструкции.Анонимы, как истинные анонимы, не могут просто взять и прочитать новость, а не придумывать и оспаривать что-то по ключевым словам заголовка?
case 418 оставить, остальное не нужно
Эта дичь по читаьельности ощутимо хуже if ..elif .. else. Лучше бы наконкец предложил ввести { } вместо yблюдочных отступов.
Языков со скобками полно на любой вкус, от криворожденных JavaScript и PHP до нормальных. Питон прекрасен отступами.
И ими же жутко не удобен
Может обоснованно ответишь? Или нужно догадаться, чем тебе отступы не угодили?
> Языков со скобками полно на любой вкус, от криворожденных JavaScript и PHP
> до нормальных. Питон прекрасен отступами.И поэтому даже у авторов языка возникает четыре (!) варианта написания новой конструкции.
Котам делать нечего, кроме как бубенчики вылизывать.
Это какой-то цирк, запоминать, кроме синтаксиса, ещё и количество отступов у элементов конструкции... Мы что, черчением занимаемся по ГОСТу?!
> Это какой-то цирк, запоминать, кроме синтаксиса, ещё и количество отступов у элементов конструкции... Мы что, черчением занимаемся по ГОСТу?!
>> Leading whitespace (spaces and tabs) at the beginning of a logical line is used to compute the indentation level of the line, which in turn is used to determine the grouping of statements.Скорее похоже на цирк опеннетных Знатоков в комментариях.
Вот у меня такой вопрос: как интерпретируется ситуация
со смесью spaces/tabs и тем, что табуляция может
быть настроена на разный размер?
> Вот у меня такой вопрос: как интерпретируется ситуация со смесью spaces/tabshttps://www.python.org/dev/peps/pep-0008/#tabs-or-spaces
> Python 3 disallows mixing the use of tabs and spaces for indentation.(хотя если очень сильно хочется, то "можно" - некоторые варианты интерпретатором не ловятся)
Цитируя Гвидо "we are all adults".> и тем, что табуляция может быть настроена на разный размер?
И? Никто не заставляет в обязательном порядке конвертировать табы в spaces.
>> Вот у меня такой вопрос: как интерпретируется ситуация со смесью spaces/tabs
> https://www.python.org/dev/peps/pep-0008/#tabs-or-spacesНу вот ссылочку вы прислали, а на вопрос не ответили.
Я же не про "как мне жить --- с пробелами или табуляцией".Как питон разруливает мешанину пробелов и табуляций?
>>> Вот у меня такой вопрос: как интерпретируется ситуация со смесью spaces/tabs
>> https://www.python.org/dev/peps/pep-0008/#tabs-or-spaces
> Ну вот ссылочку вы прислали, а на вопрос не ответили.
> Я же не про "как мне жить --- с пробелами или табуляцией".Какая буква в "disallows" вам не понятна?
> Как питон разруливает мешанину пробелов и табуляций?
>> TabError: inconsistent use of tabs and spaces in indentation
>>>> Вот у меня такой вопрос: как интерпретируется ситуация со смесью spaces/tabs
>>> https://www.python.org/dev/peps/pep-0008/#tabs-or-spaces
>> Ну вот ссылочку вы прислали, а на вопрос не ответили.
>> Я же не про "как мне жить --- с пробелами или табуляцией".
> Какая буква в "disallows" вам не понятна?Все. Позволять/непозволять --- это не питонье дело, а автора.
Питон может на это как-то реагировать. А может не реагировать.
Если он такое увидел, то как он реагирует?По ссылке написана хрень, IMO: там написано "было бы хорошо, если
бы вы писали свой код хорошо".
>> Какая буква в "disallows" вам не понятна?
> Все. Позволять/непозволять --- это не питонье дело, а автора.Cинтаксис и семантика в спеках ЯП это семантика и синтаксис именно ЯП, а не размышлизмов очередного комментатора "как оно должно быть на самом деле!".
> Питон может на это как-то реагировать. А может не реагировать.
> Если он такое увидел, то как он реагирует?Если его перед этим покормить, то скорее всего никак. Если нанести код на мышь или кролика, то слопает с превеликим удовольствием. Даже если код будет на расте или хаскелле.
А ожидаемое поведение интерпретатора языка Python 3 вполне описано:
>> (хотя если очень сильно хочется, то "можно" - некоторые варианты интерпретатором не ловятся)
>> TabError: inconsistent use of tabs and spaces in indentationИмеющий глаза прочитал бы давно.
> По ссылке написана хрень, IMO: там написано "было бы хорошо, если бы вы писали свой код хорошо".
Хрень написана в комментах, по ссылке краткая выжимка и разъяснение для тех, кто не хочет ковыряться в спеках:
https://docs.python.org/3/reference/lexical_analysis.html
> Indentation is rejected as inconsistent if a source file mixes tabs and spaces in a way that makes the meaning dependent on the worth of a tab in spaces; a TabError is raised in that case.
Вот, я вызвал раздражение светлоликих знатоков предмета. А что на самом деле имеем?- для python2: ну, хрен знает...
- для python3: ругнётся ...
Но: язык допускает i) spaces ii) tabs (визуально неразличимы!) но не смесь i) и ii);
а пробелы (и табуляция) как разделитель отались...Не, ну очень целостный и логичный язык после этого...
> Вот, я вызвал раздражение светлоликих знатоков предмета.Просто кто-то хотел с умным видом набросить на вентилятор, но получилось "как всегда" - вентилятор в неподходящий момент врубил реверс ...
> А что на самом деле имеем?
> - для python2: ну, хрен знает...
>> -t Issue a warning when a source file mixes tabs and spaces for
>> indentation in a way that makes it depend on the worth of a tab
>> expressed in spaces. Issue an error when the option is given twice.*facepalm*
> - для python3: ругнётся ...*doublefacepalm*
> Но: язык допускает i) spaces ii) tabs (визуально неразличимы!)
> но не смесь i) и ii);
> а пробелы (и табуляция) как разделитель отались...И сопельки не спешит утирать и кофе в постель не носит и вообще, что-то там про "взрослых людей пишут" хотя на опеннете анонимы писали что оно точно-точно для уровня детского сада - вот же гады и обманщики!
> Не, ну очень целостный и логичный язык после этого...
Когда не знаешь матчасти, но очень хочется набросить про питон чтобы быть "как все" - поной с умным видом о пробелах ...
>> Вот, я вызвал раздражение светлоликих знатоков предмета.
> Просто кто-то хотел с умным видом набросить на вентилятор, но получилось "как
> всегда" - вентилятор в неподходящий момент врубил реверс ...Это точно, от вас именно это и летит...
>[оверквотинг удален]
> *facepalm*
>> - для python3: ругнётся ...
> *doublefacepalm*
>> Но: язык допускает i) spaces ii) tabs (визуально неразличимы!)
>> но не смесь i) и ii);
>> а пробелы (и табуляция) как разделитель отались...
> И сопельки не спешит утирать и кофе в постель не носит и
> вообще, что-то там про "взрослых людей пишут" хотя на опеннете анонимы
> писали что оно точно-точно для уровня детского сада - вот же
> гады и обманщики!Спасибо за наставления, взрослый человек! И вам тоже не хворать.
>> Не, ну очень целостный и логичный язык после этого...
> Когда не знаешь матчасти, но очень хочется набросить про питон чтобы быть
> "как все" - поной с умным видом о пробелах ...
Сразу видно «теоретика», задающего вопросы и ничего не делающего для самостоятельного ответа.
Цена ответа - три строки на python. Или Вы боитесь «оскоромиться»?Держи, бедолага -
python2 - как попросишь,
python3 - однозначно «TabError: inconsistent use of tabs and spaces in indentation»
Спасибо, о великий питоногуру-сан!
Можно подумать что в языке без отступов не нужно делать отступы... Формально конечно не нужно, но такой код другим людям лучше не показывать.
В языке со скобочками отступы может расставить (или исправить) форматтер. А в питончике хошь – не хошь, а считай пробелы сам.
Я не могу похвастся огромным опытом написания скриптов на пайтоне, ну может пяток скриптов строк по 500 написал, но мне ни разу не приходилось считать пробелы. Начинаю подозревать, что подсчёт пробелов в пайтоне -- это миф выдуманный хейтерами.Единственное что мне пришлось дополнительно освоить для пайтона -- это как попросить emacs поменять отступ для блока целиком, но это две команды, дефолтом забинженные на "C-c C-l" и "C-c C-r". Но мне кажется, это не должно влиять, это ж просто автоматизация: вместо того, чтобы многократно тыкать <TAB> <DOWN> <TAB> <DOWN> ... и так перебирать все строки, можно выделить и сделать "C-C C-r". В любом случае ничего не надо считать.
Может если в блокноте редактировать, приходится считать? Расскажи нам, какой должен быть сетап рабочего места, чтобы пришлось считать пробелы.
> Я не могу похвастся огромным опытом написания скриптов на пайтоне, ну может пяток скриптов строк по 500 написал, но мне ни разу не приходилось считать пробелы. Начинаю подозревать, что подсчёт пробелов в пайтоне -- это миф выдуманный хейтерами.В своём коде и мне не приходилось, благо нормальным редактором пользуюсь. Но зато уж в чужом… Видел даже в пакете одного дистрибутива патч, добавляющий в код пробел.
>> Я не могу похвастся огромным опытом написания скриптов на пайтоне, ну может пяток скриптов строк по 500 написал, но мне ни разу не приходилось считать пробелы. Начинаю подозревать, что подсчёт пробелов в пайтоне -- это миф выдуманный хейтерами.
> В своём коде и мне не приходилось, благо нормальным редактором пользуюсь. Но
> зато уж в чужом…А, я понял. Сворачивай блоки просто и разворачивай. Тебе ведь не интересно количество пробелов само по себе, тебе интересно где какой блок заканчивается: если ты сворачиваешь блок, ты видишь его конец рядом с началом. Это с любым языком удобно, на самом деле.
> Видел даже в пакете одного дистрибутива патч,
> добавляющий в код пробел.Один пробел? Кто-то в блокноте набирал? Строчки же равняются табом, а там кратно четырём пробелы ставит.
> В своём коде и мне не приходилось, благо нормальным редактором пользуюсь. Но зато уж в чужом… Видел даже в пакете одного дистрибутива патч, добавляющий в код пробел.Угу. И то ли дело
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
goto fail;
goto fail;
Конечно, не нужно и это особенно заметно когда нужно поправить код на машине с ненастроенным текстовым редактором. Тем более скобками можно делать замыкание, а в ЯП на отступах такое невозможно. Отступы это самая большая ошибка в дизайне синтаксиса/грамматики языка общего назначения.
> аналогичный используемому для конструкций "if ... elif ... else"сэтого надо было начинать!
расходимся ребята
Очень перегруженный язык стал
Ведь отсутствию switch всегда было объяснение. Но теперь он зачем-то понадобился еще и не такой как у всех.
Еще бы Self добавили как алиас для имени класса
Если в 2020 году на Землю в довершение ко всему упадет метеорит я даже не удивлюсь.
> Если в 2020 году на Землю в довершение ко всему упадет метеорит
> я даже не удивлюсь.Пксть падает на Москву или на Коммифорнию.
Наверняка уже не один упал. Поищите в новостях.
А зачем оно нужно то, кроме как для красивостей, если в конечном итоге это будет транслироваться в тот же if-elif?
как и любой другой сахар, он нужен для красивостей/удобства разработчика. Во что он там транслируется мало кого интересует, кроме случая срача в комментах
30 лет как-то без сахара прожили.
> case 401|403|404:стремно выглядит, пахнет undefined behavior'ом
это даже не UB, а УГ
Там у них всего один возразил, а в ответ "ну, так же сделано в баше!". При этом в текущем пистоне все работает как положеноif 407 == 401|403|404:
print("ok")Как теперь запилить результат 1|2|3 в case? Самому каждый раз калькулировать или выделять переменную для этого? Что они там курят? Нет, я понял, что Гвидо это сделал для тупых веб-сайт-клепателей, но нельзя же на полном серьезе это допускать.
> так же сделано в баше!Ну, я тогда лучше этот баш и буду использовать.
Не нужны они в питоне. Для сопостовления с образцом следует использовать оператор индексации __getitem__.
Прикольно
прикольно в цирке, а тут вроде язык программирования... или уже не программирования...
Ну в Haskell паттерн мэтчинг удобный, кстати, я большой фанат. Как это хорошо ложится на питон, не уверен, на Питоне пишу очень мало, и если честно до конца не разобрался что да как
Стремление к совершенству ... К Cи.
> Стремление к совершенству ... К Cи.
>> match
>> case BinOp(op=Add()|Sub()):Стремление к вспуку в лужу.
> совершенству ... К Cи.
> case foo: bar; break;
> совершенствудвойному вспуку.
Ну раз хочет он это сделать - ну форкни ты крайнюю версию и добавь все это. Что другим мозги парить?
Дык в том-то и дело, что этим деятелям нравится мозги парить. Им не нужен результат, им нужен процесс пропихивания булшыта в мозги юзверей.
Странно сравнивать Python с Си. Сравнивайте с Perl или C#, где подобное давно (или не очень давно) уже имеется.
> где подобное давноу вас опечатка в слове "*авно"
Проецируете комплексы, связанные с нехваткой денег? Может, лучше всё же к клиническому психологу сходить? В Москве есть бесплатная служба, может, и в других городах найдётся что-то подобное.
это уже было у Грибоедова"где, покажите нам, отечества отцы, которых мы должны принять за образцы"
> которых мы должны принять за образцыСи. Plain Си. (с)
Прежде, чем принять для включения, нужно бы выяснить, не оскорбляют ли новые ключевые слова чьи-либо чувства. ;)
А как избежать конфликта с gettext?import gettext
gettext.bindtextdomain('myapplication', '/path/to/my/language/directory')
gettext.textdomain('myapplication')
_ = gettext.gettext
# ...
print(_('This is a translatable string.'))
Это же питон, их не волнуют проблемы юзверей, на которых они смотрят с высокой колокольни.
создать инстанс для сравнения?? это не кабздец ли?match point:
case Point(x, y) if x == y:
print(f"Y=X at {x}")мочить в сортире вас, питонщиков
Хороший компилятор для простого класса (типа того же Point) такое должен соптимизировать до простого выделения памяти на стеке и записи в неё... Но я сильно не уверен, что это случай Python, да.
Только первый пример понравился. Во втором создаются экземпляры того же класса для сравнения с образцом. Фу так делать. В третьем примере легко забыть поставить точку перед именем константы.
def whereis(point):
match point:
case Point(0, 0):
print("Origin")
case Point(0, y):
print(f"Y={y}")
case Point(x, 0):
print(f"X={x}")
case Point():
print("Somewhere else")
case _:
print("Not a point")match point:
case Point(x, y) if x == y:
print(f"Y=X at {x}")
case Point(x, y):
print(f"Not on the diagonal")Никак не могу понять почему в первом случае
case Point():
а не Point(x, y)
и в это же время во втором
case Point(x, y):
а не Point()
?Верно ли что Point(x, y) == Point() ?
Это питон, детка, теперь тебе надо ещё кучу непонятностей синтаксиса запомнить.
точно не скажу, но получается, что Point() - экзепляр класса, а Point(x, y) - экземпляр класса с конкретными параметрами
Слушайтесь дядю ван Оппосума он плохого не посоветует. Новости плюс!
я чот не понял, а чё такое E: ??? и зачем точка нужна в case .RED: ??? а так норм
На дворе шел 21-й век ...
очень не хватало, редиска.
вопрос на повестке давно стоял.
видно слишком высокий, плохо слышит, долго доходит