Как стать автором
Обновить

Комментарии 13

А не прийдем ли мы в результате к тому же, к чему пришел С++?
Имхо без этого можно было обойтись и теперь сложнее читать код, что как бы одна из сильных сторон Питона.
Да, для экспертов это не особо что-то поменяет, но порог входа — увеличивает.

Отчасти соглашусь, что сильные изменения могут привести к нечитабельности. Но именно описанного в переводе функционала реально нехватало. Уродливые вложенные if или необоснованные вычисления выражения до проверки условий реально портят жизнь.
Я поднял нижний порог до Python 3.6, но реально жалею, что еще там этого функционала не реализовано. Придётся ждать ещё 3-5 лет, когда Python 3.8 будет во всех актуальных ОС. Пока что картину портит CentOS 7.


А насчёт читабельности, я бы не сказал, что этот синтаксис сложночитаем. Даже скорее наоборот.

Давайте будем честны, что в Python и так есть довольно «профессиональный» функционал (я имею ввиду абстрактные классы, интерфейсы, аннотаций типов и т.п.), о котором «любители» или же физики с математиками даже не слышали. (что уж говорить про использование)

И вот у меня есть мнение (хоть и ооочень спорное), что оператор ":=" также будет относиться к классу «профессиональных» штучек. Но если обычный человек и встретится с такой конструкцией, то наверняка только при чтении кода. А когда читаешь код, то всё всегда намного понятнее. Поэтому думаю, что всё в порядке

Кстати, спасибо большое за вашу работу в этом направлении. Может хоть так начнут читать PEPы.

Ну вы ж видите примеры, они в вполне читаемыех «обычными» программистами местах.
Да, использовать их будут гики, но читать то прийдется ВСЕМ!
В целом, мне нравится. Некоторые примеры действительно выглядят теперь лучше.
Субъективно все, конечно… Этот пример лично мне кажется теперь переусложненным:

if self._is_special and (ans := self._check_nans(context=context)):
    return ans

Спасибо. Очень полезная статья. Потребность в таком операторе давно ощущается. Хотя интуитивно кажется, что конструкция с as была бы более читабельна.

Я пишу на питоне чуть меньше года, как web, так и консольные програмки для личного пользования. Уровень моих навыков нормальный, поскольку раньше часто писал на C и немного на D. И тогда и сейчас это не слишком глубокое знание языка и поводов для углубления особо нет. Я не страдаю получением знаний ради знаний. Меня пугает то, что часто так бывает, когда разработчики языка пилят новые фичи просто потому что ну а чем ещё заниматься. Полезен морж или нет — действительно ли он необходим или есть более важные проблемы, более фундаментальные? Вроде бы остро стоит тема скорости или параллельных вычислений, может ещё что. Мне кажется, язык живёт не тогда, когда добавляются фичи, а когда им пользуются. Питонисты, сидящие на второй версии, и не думают с неё слазить, поскольку основные фишки языка там есть. Вот эта красота ":=" — не достаточный аргумент для перехода. Больше всего людям нужно исправление ошибок и уязвимостей, а потом новые фичи. Я например могу хоть каждые пол года повышать версию питона, поскольку мои проекты довольно малы. Для таких как я фичи наверное только в плюс, а вот для тех, у кого проекты тянутся годами, нужна стабильность. Иногда и раз в 10-15 лет трудно сменить версию.

Всё-таки термин «keyword arguments» я бы предложил переводить как «именованные аргументы», а не как сейчас «ключевые аргументы». С чего это они вдруг ключевые, когда они как раз таки зачастую необязательные? Зато у них есть чётко определённое имя и этим они отличаются от позиционных аргументов, для которых имя не столь важно.

Да, вы правы, большое спасибо. Я уж не буду здесь исправлять, но в дальнейшем учту (либо попозже всё-таки доберусь, а то не хорошо новичков путать). Просто привык, что часто пользуюсь **kwargs, а он как раз возвращает словарь, по ключам которого приходится итерировать. Вот термин «keywords arguments» так хорошо и вписался в мою концепцию. Поэтому я даже не заметил, что здесь что-то не так)
Как (примерно) это делается в расте:
if let Some(match) = pattern.search(data) {
// Do something with match
}

то же самое можно и с while. Если есть два матча
if let Some(match) = pattern1.match(data).or_else(|| pattern2.match(data)) {
// Do something with match
}

вроде и не так лаконично, но, как по мне, куда более наглядно и не требует пространных статей для разъяснения.
Начались костыли. :(
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории