Comments 29
Срезы строк и списков
Правильный перевод – сечения.
С каких это пор?
Как минимум, сечение - это место разреза, то есть в нашем случае индекс.
Срез / слайс - это те части, что остаются при сечении, то есть то, в чем мы заинтересованы
Не нужно знать программирование, достаточно стереометрии
Именно в программировании этот термин переводится на русский язык словом “сечение” с 1966 года, когда эта синтаксическая возможность впервые появилась в языке PL/I. Далее в APL, Фортране и т.д. Сечения не в Питоне придумали так-то.
Что касается стереометрии, то речь буквально идёт о сечении одного n-мерного параллелепипеда другим n-мерным параллелепипедом. А вы, вероятно, представляете себе сечение плоскостью, которым обычно ограничиваются в школе.
И часто вы в жизни пересекаете произвольный n-мерный параллелепипед другим? Или, быть может, n-мерные параллелепипеды имеют прямое отношение к массивам?
Загуглите «сечение массива» и посчитайте, сколько ссылок будет релевантны в 2023 году.
Вылезайте из эпохи прологов и алголов
n-мерный параллелепипед имеет самое прямое отношение к массивам, это и есть n-мерный массив.
Загуглите «сечение массива» и посчитайте, сколько ссылок будет релевантны в 2023 году.
Что вы хотите этим сказать?
Так вы загуглили? Вместо того чтоб минус ставить в карму
Я не знаю, на что вы намекаете, а сами вы не рассказываете. Но если вы загуглите "сечение массива", то увидите материалы вузов и научных институтов, а если "срез массива" - то преимущественно популярную литературу лёгкого жанра.
Поиск по словам "срез массива" у меня ожидаемо выдает ссылки на документацию различных ЯП и прочих продуктов, а не на популярную литературу:,
array_slice в PHP - https://www.php.net/manual/ru/function.array-slice.php;
array_slice() в KQL - https://learn.microsoft.com/ru-ru/azure/data-explorer/kusto/query/arrayslicefunction;
arraySlice в доках Clickhouse - https://clickhouse.com/docs/ru/sql-reference/functions/array-functions;
Срезы в документации Postgres Pro - https://postgrespro.ru/docs/postgrespro/9.5/arrays;
Кмк, использование слова "срез" в данном случае устоялось и в общении с коллегам предпочтительнее использовать его.
Не слышать о срезах в 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. До этого - разницы никакой.
Это в самом лучшем случае. А по факту он разворачивается в ветвление из кучи ifов. По крайней мере так в GCC. Как то приходилось сравнивать время выполнения кучи ифов с свитчем. Оказалось, что выполняются они за одно и тоже время..
Не только в win. В отечественной astra Linux также не стремятся к новому
Кстати, осознанно пишу на не самой новой версии интерпретатора (3.8) как раз именно по этой причине.
Я посмотрел это видео https://www.youtube.com/watch?v=ZTvwxXL37XI и подумал, что могу подить пока и без матчинга. Буду по старинке словрики пользовать на пару с полиморфизмом.
И наконец, в последнем блоке 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, или я чего-то не понимаю?)
Две мощных возможности Python, упрощающие код и улучшающие его читабельность