Pull to refresh

Comments 29

Срезы строк и списков

Правильный перевод – сечения.

С каких это пор?

Как минимум, сечение - это место разреза, то есть в нашем случае индекс.

Срез / слайс - это те части, что остаются при сечении, то есть то, в чем мы заинтересованы

Не нужно знать программирование, достаточно стереометрии

Именно в программировании этот термин переводится на русский язык словом “сечение” с 1966 года, когда эта синтаксическая возможность впервые появилась в языке PL/I. Далее в APL, Фортране и т.д. Сечения не в Питоне придумали так-то.

Что касается стереометрии, то речь буквально идёт о сечении одного n-мерного параллелепипеда другим n-мерным параллелепипедом. А вы, вероятно, представляете себе сечение плоскостью, которым обычно ограничиваются в школе.

И часто вы в жизни пересекаете произвольный n-мерный параллелепипед другим? Или, быть может, n-мерные параллелепипеды имеют прямое отношение к массивам?

Загуглите «сечение массива» и посчитайте, сколько ссылок будет релевантны в 2023 году.

Вылезайте из эпохи прологов и алголов

n-мерный параллелепипед имеет самое прямое отношение к массивам, это и есть n-мерный массив.

Загуглите «сечение массива» и посчитайте, сколько ссылок будет релевантны в 2023 году.

Что вы хотите этим сказать?

Так вы загуглили? Вместо того чтоб минус ставить в карму

Я не знаю, на что вы намекаете, а сами вы не рассказываете. Но если вы загуглите "сечение массива", то увидите материалы вузов и научных институтов, а если "срез массива" - то преимущественно популярную литературу лёгкого жанра.

Поиск по словам "срез массива" у меня ожидаемо выдает ссылки на документацию различных ЯП и прочих продуктов, а не на популярную литературу:,

Кмк, использование слова "срез" в данном случае устоялось и в общении с коллегам предпочтительнее использовать его.

Не слышать о срезах в Python (см. КДПВ) мог только мертвый.

А match может здорово навредить, если забыть о том что в бизнесе от 5 до 20% хостов трудятся под Win7 (и Python 3.8, где match нет)/ Эстетики match-case добавляет совсем немного.

В компилируемых языках case/select обычно отличается от if тем, что изначально траслируется в таблицу переходов, а не в последовательные проверки (и по этой причине управляется выражением перечислимого типа). Но для Питона разница, действительно, чисто эстетическая.

Дело не только (имхо даже не столько) в оптимизации выполнения. Pattern matching помогает алгебраическим типам, сразу сопоставляя и деконструируя:

area :: Figure -> Int
area circle r = Pi * r*r
area rect w h = w * h

В Питоне, конечно, можно не всякое из Хаскеля, но польза от дополнительной функциональщины будет.

Gcc транслирует switch в jump-table только при наличии свыше пяти case. До этого - разницы никакой.

Хмм, шланг делал, а вот гцц я так и не смог уличить в jump table.

А просили?

-fcase-values-threshold, -fjump-table-max-growth-ratio-for-size, -fjump-table-max-growth-ratio-for-speed

Прям отдельно - нет, не просил. Только всякие уровни оптимизации дёргал. У шланга оно видимо автоматом в один из уровней попадало.

Это в самом лучшем случае. А по факту он разворачивается в ветвление из кучи ifов. По крайней мере так в GCC. Как то приходилось сравнивать время выполнения кучи ифов с свитчем. Оказалось, что выполняются они за одно и тоже время..

Не только в win. В отечественной astra Linux также не стремятся к новому

Кстати, осознанно пишу на не самой новой версии интерпретатора (3.8) как раз именно по этой причине.

И наконец, в последнем блоке case, используется символ универсального сопоставления. Он выглядит как знак подчёркивания (_) и играет роль ветви else условного оператора.

Ну гениально же! Лучшего выбора и сделать было нельзя. Но мне кажется создатели этого языка, подарка судьбы для продавцов курсов, недостаточно преисполнились в своем дзене

Вместо if нужно было использовать символ ?, а вместо else — символ /.

Возможно мы увидим это в каком-нибудь ином новорожденном языке, например, языке Udaff. Курсы по которому будут рекламировать из каждой дырки.

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

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

Лично моё мнение - там внутри него столько всего наворотили, что упоминать "явное лучше неявного" уж лучше постеснялись бы после этого. Happy debugging, bitches.

В статье логическая ошибка

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

Меня лично при знакомстве с python удивило отсутствие оператора инкрементации (++) и switch. А после появления match удивление возрасло: чем им не понравилась реализация через switch?

Пока Гвидо прокладывал курс - все двигалось более-менее последовательно. Ну решил он что ++ - это синтаксический сахар. Особенно со всеми этими неопределенностями с `i++ + ++i - ++i` и прочими..

А потом он решил устроить демократию и разрешить парочку PEP добавить контрибьюторам..

Так и появился моржовый оператор и match..

Небольшая ремарка - поведение isinstance и match совсем разное.
Первый проходится по иерархии и проверяет классы всех предков на совпадение.

>>> isinstance(car, object)
True

Второй - потрошит объект, доставая из него match_args, позволяя делать ещё и так:

>>> def match_car(car):
...   match car:
...     case Subaru(2020, model, cost):
...         print("Subaru 2020 " + model)
...     case Subaru(2021, model, cost):
...         print("Subaru 2021 " + model)
...     case _:
...         print("Failure")
>>> match_car(car)
Subaru 2021 Outback

И важно не перепутать, когда что нужно.

И я сначала грешным делом подумал, что он на этих строках инстанцирует объект, но нет, там сделали отдельный опкод виртуальной машины MATCH_CLASS для проверки класса.

  5          68 COPY                     1
             70 LOAD_GLOBAL              4 (Subaru)
             82 LOAD_CONST               1 (())
             84 MATCH_CLASS              3
             86 COPY                     1
             88 POP_JUMP_FORWARD_IF_NONE    31 (to 152)
             90 UNPACK_SEQUENCE          3
             94 LOAD_CONST               3 (2020)
             96 COMPARE_OP               2 (==)
            102 POP_JUMP_FORWARD_IF_FALSE    23 (to 150)
            104 STORE_FAST               1 (model)
            106 STORE_FAST               2 (cost)
            108 POP_TOP

о которых вы не слышали

match-то ладно, не у всех есть возможность на свежем питоне работать. Но отрицательные индексы? Cерьёзно? Это едва ли не в каждой первой книжке по питону встречается, тот же Dive into Python.

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

Я рубист-расстрига, перешедший в Питон. Могу вам заявить что ваше высказывание - это исключительно ваше мнение. Например, я с этим не согласен. Не надо обобщать - это очередной холивар.

Нет, вот без наездов, реально зумеры переизобрели оператор case, или я чего-то не понимаю?)

Sign up to leave a comment.