The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Гвидо ван Россум предложил включить в Python операторы для сопоставления с образцом

28.06.2020 09:26

Гвидо ван Россум (Guido van Rossum) представил на рассмотрение сообществом черновик спецификации для реализации в языке Python операторов для сопоставления с образцом (match и case). Следует отметить, что предложения по добавлению операторов сопоставления с образцом уже публиковались в 2001 и 2006 годах (pep-0275, pep-3103), но были отвергнуты в пользу оптимизации конструкции "if ... elif ... else" для составления цепочек сопоставления.

Новая реализация во многом напоминает оператор "match", предоставляемый в языках Scala, Rust и F#, который выполняет сравнение результата выполнения указанного выражения со списком образцов, перечисленных в блоках на основе оператора "case". В отличие от оператора "switch", доступного в языках Си, Java и JavaScript, выражения на основе "match" предлагают гораздо более широкую функциональность. Отмечается, что предложенные операторы позволят улучшить читаемость кода, упростят сопоставление произвольных Python-объектов и отладку, а также повысят надёжность кода благодаря возможности расширенной статической проверки типов.


def http_error(status):
    match status:
        case 400:
            return "Bad request"
        case 401|403|404:
            return "Not allowed"
        case 418:
            return "I'm a teapot"
        case _:
            return "Something else"

Например, возможна распаковка объектов, кортежей, списков и произвольных последовательностей для привязки переменных на основе имеющихся значений. Допускается определение вложенных шаблонов, использование в шаблоне дополнительных условий "if", применение масок ("[x, y, *rest]"), маппинга связок ключ/значение (например, {"bandwidth": b, "latency": l} для извлечения значений "bandwidth" и "latency" и словаря), извлечения подшаблонов (оператор ":="), использования именованных констант в шаблоне. В классах возможна настройка поведения при сопоставлении при помощи метода "__match__()".


   from dataclasses import dataclass

   @dataclass
   class Point:
       x: int
       y: int

   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")


   RED, GREEN, BLUE = 0, 1, 2
   match color:
       case .RED:
           print("I see red!")
       case .GREEN:
           print("Grass is green")
       case .BLUE:
           print("I'm feeling the blues :(")

Для рецензирования подготовлен набор патчей с экспериментальной реализацией предложенной спецификации, но конечный вариант ещё обсуждается. Например, предлагается вместо выражения "case _:" для значения по умолчанию использовать ключевое слово "else:" или "default:", так как "_" в других контекстах применяется как временная переменная. Также вызывают вопросы внутренняя организация, основанная на трансляции новых выражений в байткод, аналогичный используемому для конструкций "if ... elif ... else", что не обеспечит желаемой производительности при обработке очень больших наборов сопоставлений.

  1. Главная ссылка к новости (https://mail.python.org/archiv...)
  2. OpenNews: Проект Python намерен перевести отслеживание ошибок на GitHub
  3. OpenNews: Гвидо ван Россум решил отстраниться от руководства проектом Python
  4. OpenNews: Намечена большая чистка стандартной библиотеки Python
  5. OpenNews: Недоработка в Python-скрипте могла привести к неверным результатам в более 100 публикациях по химии
  6. OpenNews: Ценой перевода Mercurial на Python 3 может стать шлейф непредвиденных ошибок
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/53248-python
Ключевые слова: python
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (187) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 09:49, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +20 +/
    Не прошло и полвека…
     
     
  • 2.19, Аноним (19), 11:34, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > но были отвергнуты в пользу оптимизации конструкции "if ... elif ... else" для составления цепочек сопоставления.

    Сначала героически отвергли, потом героически ввели... Ну и кто они после этого?!

     
     
  • 3.23, Ordu (ok), 11:41, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +12 +/
    > Сначала героически отвергли, потом героически ввели...

    Они героически отвергли C-style свитч. А героически ввели Scala-style match.

    > Ну и кто они после этого?!

    Стратеги. Если бы они приняли C-style свитч тогда, а сейчас добавили бы match, то ортогональность фичей языка пошла бы лесом. И окультурить этот лес селективными вырубками не удалось бы из-за backward compatibility.

     
     
  • 4.31, uchiya (ok), 12:17, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну да, а две конструкции по итогу иметь - бог не позволяет.
     
     
  • 5.37, Ordu (ok), 13:12, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Ну да, а две конструкции по итогу иметь - бог не позволяет.

    Ну да, примерно так и есть.

     
  • 5.51, Анон102010210 (?), 14:21, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +3 +/
    1) А зачем засорять язык, если можно не засорять?
    2) Бритва оккама
    3) Вообще-то у белкового мозга есть лимит возможностей в том, сколько правил можно одновременно соблюдать и эффективно добиваться поставленных целей
     
     
  • 6.149, Gogi (??), 15:41, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Категорически неверно. "Засорять" - это когда маловажные перделки и "сахарок" добавляются тоннами - как в C# 9.0; А отдельный свич и матч были бы неплохим разделением: когда прогер использует свич, он чётко знает - это БЫСТРО и используем сплошные константы - компилятор легче генерирует оптимальный код. Если это матч - компилер уже знает, надо долго и нудно сопоставлять. И это хорошо.
     
  • 5.79, Z (??), 17:35, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Python этим то и хорош, что не тащить всякий мусор в виде дублирующих операторов!
    Посмотрите что с С++ сотворили, чужие исходники читать трудновато.
    Меньше операторов это главное что отличает современные языки вроде Go, Rust в результате читаемость чужих исходников резко повышается!
     
     
  • 6.92, rshadow (ok), 22:22, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > дублирующих операторов

    На вскидку: elif, for/while

    > Меньше операторов

    Нет. Не операторов меньше. В go например есть и if и switch.
    Уменьшают базовую бибилиотеку: никто не тащит в стандарт например парсинг cvs и т.д. Не потому что не могут, а потому что и сторонние разработчики хорошо справляются. Лучше сделать хороший пакетный менеджер, чем поддерживать зоопарк фичей.

     
  • 5.93, rshadow (ok), 22:25, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Нафига две-то? Скриптовый язык, по определению, имеет "умные" операторы. А не "тупо" транслирует в машинный код.
    Сделали бы сразу switch, а потом наворачивали на него поддержку таплов, регэкспы и прочее и прочее
     
  • 4.34, Аноним (19), 13:10, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > ортогональность фичей языка пошла бы лесом

    она и так пошла лесом, то, что делалось ифом, сейчас ещё и мачем.

     
     
  • 5.38, Ordu (ok), 13:22, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Да Но match удобнее на некоторых случаях Это во-первых сокращение записи попр... большой текст свёрнут, показать
     
  • 4.50, Аноним (50), 14:18, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +7 +/
    > не удалось бы из-за backward compatibility.

    Не забываем что разговор о питоне.

     
  • 4.102, Аноньимъ (?), 00:22, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Насмешили!
    Многоходовочка от Гвидо! Всех переиграл!

    Питон это помойка некогерентного синтаксиса с семантикой бейсика.

     
     
  • 5.105, Ordu (ok), 00:46, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Насмешили!

    Я рад.

    > Многоходовочка от Гвидо! Всех переиграл!

    Нет. Многоходовочка -- это когда план был составлен априорно. Здесь же, ситуация иная, switch был отвергнут из общих соображений, а не потому, что кто-то планировал впоследствии добавить match.

    > Питон это помойка некогерентного синтаксиса с семантикой бейсика.

    Совершенно нерелевантный обсуждению кусок информации. Твоё отношение к python'у никому не интересно.

     
     
  • 6.106, Аноньимъ (?), 01:07, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Секреты интриги расследования. Тонкое стратегическое мышление в развитии скриптов для домохозяек.

    Мои бока.

    Не знал что у Питона есть секта фанатиков в рунете которые на полном серьезе интересуются "полезной" "политинформацией" о тонкостях решений закулисами так сказать.

    Еще и инфантильное тыканье, вы студент? Или Школьник может? Не примите за оскорбление, а то многие на школьника обижаются почему-то. Это нормально ведь, в школе учиться. Только питон там зря преподают. Раньше паскалю учили.

    Ну и с чего вы взяли, что можете релевантность чего-либо определить? Ну будь вы хоть Гвидо этим, еще понятна была бы такая напыщенность. Но вот лично вы, никакого отношения к успехам питона не имеете.

     
     
  • 7.109, Ordu (ok), 01:39, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Я бы встречно предположил, что студент тут ты искать и находить секретные гр... большой текст свёрнут, показать
     
     
  • 8.127, Аноньимъ (?), 09:38, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Эк вас прёт Извините, нет абсолютно времени в подобной мути разбираться А отсу... текст свёрнут, показать
     
     
  • 9.133, Ordu (ok), 10:00, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Ну да, давай, демонстрируй нам свою способность уходить в кристаллизованный ad h... текст свёрнут, показать
     
     
  • 10.186, Аноньимъ (?), 02:17, 30/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Говорить о себе в третьем лице это клиника ... текст свёрнут, показать
     
  • 4.118, Atterratio (ok), 07:48, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    А можно для идиотов объяснить в чём принципиальное отличие? Я по коду особой разницы не вижу.
     
     
  • 5.123, Аноним (19), 08:46, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Они сами не могут объёснить, как 30 лет жили без мачи, а теперь вдруг ввели её себе в голову.
     
  • 5.132, Ordu (ok), 09:57, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    def whereis point match point case Point 0, 0 ... большой текст свёрнут, показать
     
  • 2.205, Vkni (ok), 23:01, 04/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Да, всего 10 лет осталось - ML в 79м придумали.
     

     ....большая нить свёрнута, показать (23)

  • 1.2, Аноним (2), 09:54, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Регулярки-то можно будет запихнуть туда? Реальный юзкейс. xD

    Но да, не хватало для счастья именно этого. Ну, среди прочего. Эх, ещё бы := в ф-строки пихать разрешили... Или это уже перебор?

     
     
  • 2.3, Аноним (2), 10:00, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Правда, как сахар для if не очень полезно, наверное. Лучше бы чем-нибудь полезным занимались.
     
     
  • 3.5, Васька (??), 10:13, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Вполне себе полезно, т.к. подобные конструкции через if выглядят не по питоновски. Одно из немногих за последнее время изменений делающих питон более питоном, остальное в другую сторону, по большей части.
     
     
  • 4.35, Аноним (35), 13:11, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Иногда словарь помогает. Но всё зависит от сравниваемых данных.
     
     
  • 5.62, Аноним (2), 15:35, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Иногда словарь помогает. Но всё зависит от сравниваемых данных.

    По-моему со словарём были проблемы с тормозами и перерасходом памяти. Последнее частично исправлялось различными костылями. Я уже не знаю что такое питоновый питон. Сначала привыкаешь к 1 питону, потом привыкаешь к постоянным изменениям, потом уже шпаришь со всеми новыми фичами -- ведь они стабильно повышают удобство и качество жизни. Решение оставить на плаву 2 питон в течение такого срока было совершенно фатальным, теперь нужно навёрстывать.

     
     
  • 6.72, Васька (??), 16:27, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Питон это красивый ясночитаемый код, в первую очередь, для тех кому нужно. В этом сила этого языка - писать быстро, читать легко, даже чужое. Остальное либо производное от этого, либо является минусом.
    Потому - более по-питоновски, по моему мнению, это все, что угодно в пользу этого факта. Последнее время конструкции языка усложняются и вообще местами напоминают натягивание совы на глобус, мне не сложно, мне непонятно нафига.

    Драма перехода на три это как застиранное пятно от кофе на рубашке определенной репутации языка. Никуда оно уже не денется, странно, что вы с ней ещё носитесь.

     
     
  • 7.77, Аноним (2), 17:05, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Возьмите луа, если вам так хочется На мой взгляд, чем сложнее и мощнее язык, те... большой текст свёрнут, показать
     
  • 7.103, Аноньимъ (?), 00:24, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    - "Питон это красивый ясночитаемый код"

    Прекрати человек анекдот.

     
     
  • 8.195, dffdf (?), 07:53, 01/07/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    вопрос решите и обоснуйте решение 4 2 4-2 а то развелось тут специалистов по ... текст свёрнут, показать
     
     
  • 9.206, Аноньимъ (?), 02:21, 18/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Ответ - синтаксическая ошибка, внезаптные скобки после числа ... текст свёрнут, показать
     
  • 9.208, Аноньимъ (?), 16:25, 26/08/2020 [^] [^^] [^^^] [ответить]  
  • +/
    У вас невалидный ввод Неожиданные символ после 2 ... текст свёрнут, показать
     
  • 3.7, Васька (??), 10:27, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Скорей, конечно, надо читать: "предложенные выглядят более по питоновски", так правильно
     
     
  • 4.61, Кондратий (?), 15:28, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    В каком-нить экзотическом Парсер (Parser3/parser.ru) - конструкция switch - case/default почти 20 лет из коробки, и ооочень широко используется для опциального ветвления, без нее тяжко, пример в топике актуальный.
     
  • 4.101, vitalif (ok), 00:17, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +3 +/
    "Добрый день, к вашим услугам питон-разработчик, слонёнок-тестер и мартышка-тимлид" (c)
     
  • 2.11, Аноним (11), 11:05, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +3 +/
    >ещё бы := в ф-строки пихать разрешили

    ловите наркомана.. надеюсь такие побочные эффекты никогда в язык не пролезут - жаль что в принципе это присваивание просочилось.

     
     
  • 3.16, Аноним (2), 11:21, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Ну так сейчас их в .format() класть приходится, было бы удобней и менее грязно сразу на месте. А так приходится отказываться от продвинутых эффективных строк. Нет, не жаль, такое присваивание позволяет писать более эффективные однострочники.
     
     
  • 4.17, Аноним (11), 11:23, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    это первый шаг в сторону перла имхо
     
  • 2.96, Оно (?), 22:55, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Уже есть := конструкция доки читайте
     
  • 2.154, Sarcastic scutosaurus (?), 18:05, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > Регулярки-то можно будет запихнуть туда? Реальный юзкейс.

    Вот так хочешь?

    [CODE]
    for ($var) {
      /regex1/ ? do_something() :
      /regex2/ ? do_something_other() :
      default_action();
    }
    [CODE]

    Так очень даже запросто. Только гвидобейсик придётся выкинуть…

     

  • 1.4, Иваня (?), 10:03, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +9 +/
    Да блин, в питоне синтаксис итак перегружен, столько всяких конструкций, за один день не разберёшься со всем, а он ещё хочет усложнить 😢
     
     
  • 2.6, Аноним (6), 10:15, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +10 +/
    Могу предложить Brainfuck, там простеиший синтаксис
     
     
  • 3.44, анонимно (?), 13:47, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    В брейнфаке плохо реализовано ООП )
     
     
  • 4.52, Аноним (52), 14:21, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А оно там ваще есть?
     
     
  • 5.56, myhand (ok), 14:45, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Есть, конечно.  Он же тьюринг-полный.
     
  • 5.69, Аноним (19), 16:03, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ООП есть везде, где есть процедуры и данные. Главное, чтобы не развился ООП головного мозга.
     
     
  • 6.94, rshadow (ok), 22:30, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Чисто теоретически ООП, это набор самоограничений, позволющий осиливать сложность ПО. Если нет классов, то можно их реализовывать например на уровне подключения файлов. Или придумать любой свод правил на том что есть =)
     
  • 6.192, Аноним (192), 15:43, 30/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    А как на одних только процедурах и данных реализовать инкапсуляцию, наследование, полиморфизм?
     
  • 4.78, draw1 (?), 17:16, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > В брейнфаке плохо реализовано ООП )

    По-моему, там просто отличное ООП! ))

     
     
  • 5.124, Аноним (19), 08:52, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Похоже, изучение ООП надо начинать с ассемблера. Вот тогда в мозгах будет правильный ООП. Как напишет хомячок на асме VMT, так сразу будет знать, что это такое.
     
     
  • 6.200, Урри (?), 10:44, 02/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Это на и сишечке сделать несложно. Зачем же из пушки по воробьям то стрелять?
     

  • 1.8, Аноним (8), 10:36, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    _ - не улучшит читаемость кода. Улучшит её default: как например в C#
     
     
  • 2.9, Аноним (9), 10:42, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +15 +/
    Это не по-питоновски. Чем менее понятно, что происходит, тем более питоновской является конструкция.
     
     
  • 3.12, Аноним (12), 11:07, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да скоро до башевских реулярок так дойдем.
     
     
  • 4.155, Sarcastic scutosaurus (?), 18:09, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Опять какое-то школоло вылезло… Нет в баше регулярок. Никаких. И никогда не было.
     
     
  • 5.168, Аноним (19), 19:40, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Господи, откуда вы лезете? А что делает оператор =~ в баше?
     
     
  • 6.171, Sarcastic scutosaurus (?), 20:26, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    OMG, они и это туда запилили? Ладно, был неправ, прошу прощения.
     
  • 3.107, Аноньимъ (?), 01:10, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Этот коммент глаголит мудрость.
     
  • 2.14, Аноним (11), 11:11, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    дефолт еще хуже, потому что новое ключевое слово. понимаю - в шарпах об этом совсем не парятся, но в питоне стараются сделать еще и красиво(минимализм рулит) надеюсь else будет (для симметрии с try/for/if).
     
     
  • 3.65, Аноним (65), 15:51, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > в питоне стараются сделать еще и красиво

    Субъективщина. Не считаю гвидобейсик "красивым".

    > минимализм рулит

    Тогда иди в Brainfuck.

     
     
  • 4.128, Аноним (11), 09:40, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    >Субъективщина

    тут не спорю

    мне кажется очевидный факт что чем меньше ключевых слов - тем лучше для языка при одинаковом наборе фичей. это и есть продуманность и согласованность их(фич) друг с другом

     
  • 3.98, Александр (??), 23:42, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Минимализм - это к Lua. А тут попытка усидеть на двух стульях.
     
     
  • 4.126, Аноним (11), 09:37, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >А тут попытка усидеть на двух стульях.

    и надо признать что у них весьма не дурно это получается, судя по всем рейтингам и такой широкой области применимости - наверное даже самой широкой

     
     
  • 5.130, Аноньимъ (?), 09:44, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Успех питона несвязан с техническими свойствами языка.
    Он экономический и политический.
     
     
  • 6.137, Аноним (11), 11:12, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    сильное заявление, требующие доказательства. хотел бы узнать более развернуто почему питон по-вашему популярен. да - у питона много недостатков, но остальные языки имеют их еще больше(не говорю за хаскели/эрланги и прочие кложуры, потому как не работал с ними плотно)
     
     
  • 7.145, Аноньимъ (?), 15:13, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Хотелось бы.

    Что скажите кстати насчёт Лавкрафта? Читали?

     
  • 2.20, n00by (ok), 11:38, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    _ традиционно используется в языках, где петтерн-матчинг имеется изначально.
     
     
  • 3.42, Аноним (42), 13:34, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    И очень зря.
     
     
  • 4.49, n00by (ok), 14:14, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Да... зрят в корень.))
     
  • 2.24, Аноним (24), 11:44, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +5 +/
    В Python даже для for и while есть else, логично использовать его и здесь.
     

  • 1.10, Аноним (12), 11:01, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Гвидо вместо того чтобы повелеть своим диктаторским решением, выставил на рассмотрение? Куда катится этот мир.
     
     
  • 2.13, Sluggard (ok), 11:10, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Он уже не диктатор, и даже из Dropbox ушёл на пенсию. Ты всё проспал.
    https://www.opennet.dev/opennews/art.shtml?num=48959
    https://www.opennet.dev/opennews/art.shtml?num=51778
     
     
  • 3.71, Sw00p aka Jerom (?), 16:10, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    В мавзолей ему пора.
     
  • 2.97, пох. (?), 23:09, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > Гвидо вместо того чтобы повелеть своим диктаторским решением,
    > выставил на рассмотрение? Куда катится этот мир.

    я надеюсь, ему велят катиться со своим очередным switch - "голым сували и будем сувать, вези еще elifов!"

    хотя, попытка с '_' хороша своей полной нечитаемостью. Так что может в этот раз и прокатить.

     
     
  • 3.139, anonymous yet another (?), 12:50, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я так понимаю, что '_' пересекается с распространённой
    практикой использования '_' как локальной переменной?
     

  • 1.15, Anonymoustus (ok), 11:16, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Есть такие, кто сходили почитать pep-3103? В этих четырёх вариантах синтаксиса новой конструкции вся убогость Пихтона как на ладони. А еще Перл им, понимаешь, не нравится… :-)
     
     
  • 2.95, rshadow (ok), 22:35, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Perl можно во многом обвинять, но в синтаксисе он топовый. Все таки лингвист создавал.
    Конечно если не писать специально "типичные программы на perl".
     

  • 1.18, Аноним (18), 11:29, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Почему просто switch не добавить? Если оно выглядит как switch, крякает как switch, то это switch.
    Назвав конструкцию match, они и провоцируют вопрос, заданный выше, про регулярки.
     
     
  • 2.21, Аноним (19), 11:40, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Тоже сначала подумал, что наконец-то оператор регулярок сделали... Ан нет, сделали по пи... по питоновски, "никакулюдей", "яойсобенная".
     
  • 2.22, n00by (ok), 11:41, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Вот настоящий 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.html

     
     
  • 3.28, Урри (?), 11:58, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    На тридцати языках: https://rosettacode.org/wiki/Pattern_matching
     
     
  • 4.32, n00by (ok), 12:30, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > На тридцати языках: 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)
    указан РЕФАЛ, а в русскоязычном про него ничего нет (в РЕФАЛ через сопоставление реализуется вообще всё).

     
  • 2.25, Аноним (24), 11:46, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Крякает он как раз как match, судя по выражению "case Point(x, y) if x == y", такое никакой switch провернуть не сможет.
     
     
  • 3.26, n00by (ok), 11:49, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Крякает он как раз как match, судя по выражению "case Point(x, y)
    > if x == y", такое никакой switch провернуть не сможет.

    Спасибо, проглядел if.

     
  • 3.131, Аноним (131), 09:47, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это вообще синтаксический ад какой-то, честно говоря.
    Для такого надо или ИЛИ пихать или не делать такое вообще.
     
  • 2.36, коржик (?), 13:11, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > Если оно выглядит как switch, крякает как switch, то это switch.

    Не совсем.

    match это по идее выражение, оно возвращает один из подошедших вариантов,

    switch - это как правило стейтмент (поправьте, как правильно говорить), который ничего не возвращает, еще и проваливается сверху-вниз если break не поставить.

     
     
  • 3.99, Александр (??), 23:50, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Кстати, в каком-то языке я встречал возвращающий switch. Выглядело (условно) это как-то так:
    int r = switch (op)
    {
    case '+': a + b;
    case '-': a - b;
    case '*': a * b;
    case '/': a / b;
    };
     
     
  • 4.116, коржик (?), 06:51, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > Кстати, в каком-то языке я встречал возвращающий 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(),
        };

     
     
  • 5.125, Аноним (19), 08:56, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    ужас какой-то... кто это использует?!
     
     
  • 6.135, Аноним (135), 10:37, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Прикол же, чисто демонстрационный. В реальности действительно приятная вещь... знакомая, по сути, всем любителям функционального программирования. ;)
     
  • 2.57, myhand (ok), 14:54, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Почему просто switch не добавить?

    Потому что это не switch.  Читайте pep.

    > Назвав конструкцию match, они и провоцируют вопрос, заданный выше, про регулярки.

    Да, существуют граждане, закомящееся с языком как-то по basic-english словарю и ключевым словам...

    Но если делать язык в расчете на подобных, выражусь политкорректно, идиотов - получится язык для идиотов.

     
     
  • 3.76, Аноним (76), 17:00, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Так уже получился.
     

  • 1.27, corvuscor (ok), 11:56, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А мне нравится, очень хорошо читаемая конструкция, я лично за.

    Меня лично эти if-elif-else в питоне всегда бесили, предпочитаю вместо них словари, но это тоже адский костыль и не всегда удобнее.

     
     
  • 2.146, Аноним (-), 15:15, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Самый лучший способ улучшить читаемость программ - нигде не использовать питон....
     

  • 1.29, YetAnotherOnanym (ok), 11:59, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    У меня, как и у многих, тоже возник вопрос "А где ты раньше был", но вроде бы штука удобная, м.б. лучше поздно, чем никогда? (Дисклеймер: не питонист ни разу)
     
     
  • 2.63, Вы забыли заполнить поле Name (?), 15:48, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > У меня, как и у многих, тоже возник вопрос "А где ты раньше был",

    Мировоззрение меняется просто. Может он поиспользовал эту конструкцию в других языках и понял, что удобно.

     

  • 1.30, Аноним (30), 12:03, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    > case Point():

    Это выглядит как создание объекта со значением по умолчанию, почему оно должно совпасть с любым другим значением не совсем ясно.

     
     
  • 2.60, Онаним (?), 15:28, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Это питон. Не ищите нормального синтаксиса там, где его нет.
     
  • 2.64, Вы забыли заполнить поле Name (?), 15:51, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > почему оно должно совпасть с любым другим значением не совсем ясно

    Как я понимаю оно совпадает с произвольной точкой (в смысле не с (0, 0), (x, 0) или (0, y)). Любое другое значение - это _.

     
     
  • 3.166, Ordu (ok), 19:24, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вопрос, как я понимаю в том, почему используется синтаксис Point(), а не Point(_, _).
     
     
  • 4.169, Аноним (19), 19:47, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    точно (_,_). Везде в питоне (_,_).
     
  • 4.191, Вы забыли заполнить поле Name (?), 15:08, 30/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Да, странно. Особенно, учитывая, что конструктор Point требует 2 аргумента.
     

  • 1.39, Аноним (-), 13:22, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Может я что то в жизни не понимаю, но ООП для этого вроде и придумали что бы не пихать новый синтаксис, а создавать "новые" комманды на основе классов, для языка.
     
     
  • 2.40, нона (?), 13:31, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Определенно не понимаешь, ООП придумали, чтобы книжки таким как ты продавать.
     
  • 2.179, Аноним (135), 23:22, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    ООП придумали чтобы снизить порог вхождения. Объекты со свойствами и наследованием принять проще, чем непонятные регистры и слабо укладывающиеся в голове математика «функции».
     
     
  • 3.189, Аноним (19), 08:53, 30/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    +5. А математики в своей голове хоть что-то уложить - могут?
     

  • 1.41, Вы забыли заполнить поле Name (?), 13:32, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > В отличие от оператора "switch", доступного в языках Си, Java и JavaScript,

    JFI для JS уже очень давно висит аналогичное предложение https://github.com/tc39/proposal-pattern-matching

     
  • 1.45, ALex_hha (ok), 13:48, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Также вызывают вопросы внутренняя организация, основанная на трансляции новых выражений в байткод, аналогичный используемому для конструкций "if ... elif ... else", что не обеспечит желаемой производительности при обработке очень больших наборов сопоставлений.

    думаю, тут дело в первую очередь про удобство, а не производительность. Ибо "if ... elif ... else" ацки неудобная. Очень не хватает switch/case

     
     
  • 2.67, Аноним (19), 15:59, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Ибо "if ... elif ... else" ацки неудобная.

    30 лет с ифом жили, и тут - бац! - прям озарило...

     
  • 2.151, Anonim (??), 16:06, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Это тот switch, в котором практически для каждого case нужно рисовать break? Спасибо не надо.
     
     
  • 3.156, Аноним (156), 18:17, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Сделай switch, в котором не надо рисовать break. Но можно нарисовать fallthrough при необходимости. Ой, нет, так уже другие люди сделали…
     
  • 3.170, Аноним (19), 19:49, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Начнёшь писать программы - поймёшь, почему где-то нужен break, а где-то - нет.
     

  • 1.48, Аноним (48), 14:12, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Хочет дотянуть функционал петона до уровня bash?
     
     
  • 2.138, Аноним (11), 12:01, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    конечно, а то раньше-то он не был тьюринг полным
     

  • 1.53, Аноним (53), 14:28, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    Лучше верни master/slave, идиотизм какой-то потакать 0.01% извращенцев и менять веками устоявшиеся конструкции.
     
     
  • 2.70, Аноним (65), 16:06, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Петончик как модный хайповый язык не может не потакать 0.01% извращенцев. Страдайте.
     
     
  • 3.89, Аноним84701 (ok), 19:53, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > Петончик как модный хайповый язык не может не потакать 0.01% извращенцев. Страдайте.
    >>>  предложил включить в Python операторы для сопоставления с
    >> менять веками устоявшиеся конструкции.

    Анонимы, как истинные анонимы, не могут просто взять и прочитать новость, а не придумывать и оспаривать что-то по ключевым словам заголовка?

     

  • 1.59, Онаним (?), 15:27, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    case 418 оставить, остальное не нужно
     
  • 1.73, all_glory_to_the_hypnotoad (ok), 16:29, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Эта дичь по читаьельности ощутимо хуже if ..elif .. else. Лучше бы наконкец предложил ввести { } вместо yблюдочных отступов.
     
     
  • 2.88, Аноним (88), 19:40, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Языков со скобками полно на любой вкус, от криворожденных JavaScript и PHP до нормальных. Питон прекрасен отступами.
     
     
  • 3.100, Александр (??), 23:54, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • –2 +/
    И ими же жутко не удобен
     
     
  • 4.198, Аноним (198), 14:11, 01/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Может обоснованно ответишь? Или нужно догадаться, чем тебе отступы не угодили?
     
  • 3.111, Anonymoustus (ok), 06:13, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Языков со скобками полно на любой вкус, от криворожденных JavaScript и PHP
    > до нормальных. Питон прекрасен отступами.

    И поэтому даже у авторов языка возникает четыре (!) варианта написания новой конструкции.

     
     
  • 4.122, Ан959н (?), 08:40, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Котам делать нечего, кроме как бубенчики вылизывать.
     
  • 3.120, Аноним (19), 08:35, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Это какой-то цирк, запоминать, кроме синтаксиса, ещё и количество отступов у элементов конструкции... Мы что, черчением занимаемся по ГОСТу?!
     
     
  • 4.144, анонн. (?), 15:07, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Это какой-то цирк, запоминать, кроме синтаксиса, ещё и количество отступов у элементов конструкции... Мы что, черчением занимаемся по ГОСТу?!
    >> 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.

    Скорее похоже на цирк опеннетных Знатоков в комментариях.

     
  • 3.140, anonymous yet another (?), 13:05, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Вот у меня такой вопрос: как интерпретируется ситуация
    со смесью spaces/tabs и тем, что табуляция может
    быть настроена на разный размер?
     
     
  • 4.147, анонн. (?), 15:21, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > Вот у меня такой вопрос: как интерпретируется ситуация со смесью spaces/tabs

    https://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.

     
     
  • 5.152, anonymous yet another (?), 16:14, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    >> Вот у меня такой вопрос: как интерпретируется ситуация со смесью spaces/tabs
    > https://www.python.org/dev/peps/pep-0008/#tabs-or-spaces

    Ну вот ссылочку вы прислали, а на вопрос не ответили.
    Я же не про "как мне жить --- с пробелами или табуляцией".

    Как питон разруливает мешанину пробелов и табуляций?

     
     
  • 6.153, анонн. (?), 16:59, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >>> Вот у меня такой вопрос: как интерпретируется ситуация со смесью spaces/tabs
    >> https://www.python.org/dev/peps/pep-0008/#tabs-or-spaces
    > Ну вот ссылочку вы прислали, а на вопрос не ответили.
    > Я же не про "как мне жить --- с пробелами или табуляцией".

    Какая буква в "disallows" вам не понятна?

    > Как питон разруливает мешанину пробелов и табуляций?
    >> TabError: inconsistent use of tabs and spaces in indentation

     
     
  • 7.187, anonymous yet another (?), 03:47, 30/06/2020 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >>>> Вот у меня такой вопрос: как интерпретируется ситуация со смесью spaces/tabs
    >>> https://www.python.org/dev/peps/pep-0008/#tabs-or-spaces
    >> Ну вот ссылочку вы прислали, а на вопрос не ответили.
    >> Я же не про "как мне жить --- с пробелами или табуляцией".
    > Какая буква в "disallows" вам не понятна?

    Все. Позволять/непозволять --- это не питонье дело, а автора.

    Питон может на это как-то реагировать. А может не реагировать.
    Если он такое увидел, то как он реагирует?

    По ссылке написана хрень, IMO: там написано "было бы хорошо, если
    бы вы писали свой код хорошо".

     
     
  • 8.194, анонн. (?), 17:29, 30/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Cинтаксис и семантика в спеках ЯП это семантика и синтаксис именно ЯП, а не разм... большой текст свёрнут, показать
     
     
  • 9.202, anonymous yet another (?), 14:01, 02/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Вот, я вызвал раздражение светлоликих знатоков предмета А что на самом деле име... текст свёрнут, показать
     
     
  • 10.203, Аноним (-), 14:58, 02/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Просто кто-то хотел с умным видом набросить на вентилятор, но получилось как вс... большой текст свёрнут, показать
     
     
  • 11.204, anonymous yet another (?), 16:08, 02/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Это точно, от вас именно это и летит gt оверквотинг удален Спасибо за наста... большой текст свёрнут, показать
     
  • 6.190, userd (ok), 12:54, 30/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Сразу видно «теоретика», задающего вопросы и ничего не делающего для самостоятельного ответа.
    Цена ответа - три строки на python. Или Вы боитесь «оскоромиться»?

    Держи, бедолага -
    python2 - как попросишь,
    python3 - однозначно «TabError: inconsistent use of tabs and spaces in indentation»

     
     
  • 7.201, anonymous yet another (?), 13:49, 02/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо, о великий питоногуру-сан!
     
  • 2.141, Аноним (88), 13:12, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Можно подумать что в языке без отступов не нужно делать отступы... Формально конечно не нужно, но такой код другим людям лучше не показывать.
     
     
  • 3.158, Аноним (156), 18:21, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    В языке со скобочками отступы может расставить (или исправить) форматтер. А в питончике хошь – не хошь, а считай пробелы сам.
     
     
  • 4.167, Ordu (ok), 19:37, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я не могу похвастся огромным опытом написания скриптов на пайтоне, ну может пято... большой текст свёрнут, показать
     
     
  • 5.172, Аноним (156), 20:35, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Я не могу похвастся огромным опытом написания скриптов на пайтоне, ну может пяток скриптов строк по 500 написал, но мне ни разу не приходилось считать пробелы. Начинаю подозревать, что подсчёт пробелов в пайтоне -- это миф выдуманный хейтерами.

    В своём коде и мне не приходилось, благо нормальным редактором пользуюсь. Но зато уж в чужом… Видел даже в пакете одного дистрибутива патч, добавляющий в код пробел.

     
     
  • 6.174, Ordu (ok), 20:56, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    А, я понял Сворачивай блоки просто и разворачивай Тебе ведь не интересно колич... большой текст свёрнут, показать
     
  • 6.175, Аноним84701 (ok), 21:27, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > В своём коде и мне не приходилось, благо нормальным редактором пользуюсь. Но зато уж в чужом… Видел даже в пакете одного дистрибутива патч, добавляющий в код пробел.

    Угу. И то ли дело



    if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
        goto fail;
        goto fail;


     
  • 3.193, all_glory_to_the_hypnotoad (ok), 17:02, 30/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Конечно, не нужно и это особенно заметно когда нужно поправить код на машине с ненастроенным текстовым редактором. Тем более скобками можно делать замыкание, а в ЯП на отступах такое невозможно. Отступы это самая большая ошибка в дизайне синтаксиса/грамматики языка общего назначения.
     

     ....большая нить свёрнута, показать (25)

  • 1.74, Xasd5 (?), 16:59, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > аналогичный используемому для конструкций "if ... elif ... else"

    сэтого надо было начинать!

    расходимся ребята

     
  • 1.75, Аноним (75), 16:59, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Очень перегруженный язык стал
     
     
  • 2.82, Аноним (82), 17:50, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ведь отсутствию switch всегда было объяснение. Но теперь он зачем-то понадобился еще и не такой как у всех.
     

  • 1.80, Аноним (80), 17:40, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Еще бы Self добавили как алиас для имени класса
     
  • 1.81, Аноним (82), 17:49, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Если в 2020 году на Землю в довершение ко всему упадет метеорит я даже не удивлюсь.
     
     
  • 2.113, Anonymoustus (ok), 06:15, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Если в 2020 году на Землю в довершение ко всему упадет метеорит
    > я даже не удивлюсь.

    Пксть падает на Москву или на Коммифорнию.

     
  • 2.115, sergey (??), 06:45, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Наверняка уже не один упал. Поищите в новостях.
     

  • 1.84, Аноним (84), 18:01, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А зачем оно нужно то, кроме как для красивостей, если в конечном итоге это будет транслироваться в тот же if-elif?
     
     
  • 2.129, Аноним (131), 09:41, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    как и любой другой сахар, он нужен для красивостей/удобства разработчика. Во что он там транслируется мало кого интересует, кроме случая срача в комментах
     
     
  • 3.163, Аноним (19), 18:29, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    30 лет как-то без сахара прожили.
     

  • 1.85, Аноним (85), 18:11, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    > case 401|403|404:

    стремно выглядит, пахнет undefined behavior'ом

     
     
  • 2.87, Аноним (19), 19:00, 28/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    это даже не UB, а УГ
     
  • 2.142, Аноним (142), 14:12, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Там у них всего один возразил, а в ответ "ну, так же сделано в баше!". При этом в текущем пистоне все работает как положено

    if 407 == 401|403|404:
      print("ok")

    Как теперь запилить результат 1|2|3 в case? Самому каждый раз калькулировать или выделять переменную для этого? Что они там курят? Нет, я понял, что Гвидо это сделал для тупых веб-сайт-клепателей, но нельзя же на полном серьезе это допускать.

     
     
  • 3.162, Аноним (19), 18:29, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > так же сделано в баше!

    Ну, я тогда лучше этот баш и буду использовать.

     

  • 1.90, Аноним (90), 20:15, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Не нужны они в питоне. Для сопостовления с образцом следует использовать оператор индексации __getitem__.
     
  • 1.91, srgazh (?), 20:57, 28/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Прикольно
     
     
  • 2.165, Аноним (19), 19:02, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    прикольно в цирке, а тут вроде язык программирования... или уже не программирования...
     

  • 1.110, Аноним (110), 03:11, 29/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ну в Haskell паттерн мэтчинг удобный, кстати, я большой фанат. Как это хорошо ложится на питон, не уверен, на Питоне пишу очень мало, и если честно до конца не разобрался что да как
     
  • 1.114, Аноним (114), 06:22, 29/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Стремление к совершенству ... К Cи.
     
     
  • 2.143, Аноним (-), 15:01, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Стремление к совершенству ... К Cи.
    >> match
    >> case BinOp(op=Add()|Sub()):

    Стремление к вспуку в лужу.
    > совершенству ... К Cи.
    > case foo: bar; break;
    > совершенству

    двойному вспуку.


     

  • 1.117, Daemon (??), 07:03, 29/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Ну раз хочет он это сделать - ну форкни ты крайнюю версию и добавь все это. Что другим мозги парить?
     
     
  • 2.119, Аноним (19), 08:27, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Дык в том-то и дело, что этим деятелям нравится мозги парить. Им не нужен результат, им нужен процесс пропихивания булшыта в мозги юзверей.
     

  • 1.134, Аноним (135), 10:33, 29/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Странно сравнивать Python с Си. Сравнивайте с Perl или C#, где подобное давно (или не очень давно) уже имеется.
     
     
  • 2.161, Аноним (19), 18:25, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > где подобное давно

    у вас опечатка в слове "*авно"

     
     
  • 3.177, Аноним (135), 23:13, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Проецируете комплексы, связанные с нехваткой денег? Может, лучше всё же к клиническому психологу сходить? В Москве есть бесплатная служба, может, и в других городах найдётся что-то подобное.
     

  • 1.136, бедный буратино (ok), 11:12, 29/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    это уже было у Грибоедова

    "где, покажите нам, отечества отцы, которых мы должны принять за образцы"

     
     
  • 2.160, Аноним (19), 18:24, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > которых мы должны принять за образцы

    Си. Plain Си. (с)

     

  • 1.148, Аноним (192), 15:38, 29/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Прежде, чем принять для включения, нужно бы выяснить, не оскорбляют ли новые ключевые слова чьи-либо чувства. ;)
     
  • 1.150, Anonimus (??), 15:43, 29/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    А как избежать конфликта с gettext?

    import gettext
    gettext.bindtextdomain('myapplication', '/path/to/my/language/directory')
    gettext.textdomain('myapplication')
    _ = gettext.gettext
    # ...
    print(_('This is a translatable string.'))

     
     
  • 2.164, Аноним (19), 18:49, 29/06/2020 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Это же питон, их не волнуют проблемы юзверей, на которых они смотрят с высокой колокольни.
     

  • 1.159, Аноним (159), 18:22, 29/06/2020 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +2 +/
     

  • 1.176, Аноним (88), 21:48, 29/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Только первый пример понравился. Во втором создаются экземпляры того же класса для сравнения с образцом. Фу так делать. В третьем примере легко забыть поставить точку перед именем константы.
     
  • 1.184, Аноним (184), 00:11, 30/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/



      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() ?

     
     
  • 2.185, Аноним (19), 00:42, 30/06/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Это питон, детка, теперь тебе надо ещё кучу непонятностей синтаксиса запомнить.
     
  • 2.197, Аноним (198), 14:04, 01/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    точно не скажу, но получается, что Point() - экзепляр класса, а Point(x, y) - экземпляр класса с конкретными параметрами
     

  • 1.188, Аноним (-), 07:52, 30/06/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Слушайтесь дядю ван Оппосума он плохого не посоветует. Новости плюс!
     
  • 1.196, Аноним (198), 14:00, 01/07/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    я чот не понял, а чё такое E: ??? и зачем точка нужна в case .RED: ??? а так норм
     
  • 1.199, Аноним (199), 17:19, 01/07/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    На дворе шел 21-й век ...
     
  • 1.207, warus (??), 11:12, 01/08/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    очень не хватало, редиска.
    вопрос на повестке давно стоял.
    видно слишком высокий, плохо слышит, долго доходит
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру