balu
- геттеры/сеттеры расчудесно работали с property, зачем объявлять по новому?
property - частный случай дескриптора, который имеет гораздо более широкую функциональность. Реализаций дескрипторов может быть множество (я сам их делал как минимум несколько десятков раз).
Дескрипторы введены для лучшей инкапсуляции.
balu
- чем не угодил try/finally, что ввели with?
Это не только try/finally (с информацией об исключении, которую можно достать и через sys.info - более неявно), но и переменная контекста. Context managers опять же обеспечивают лучшую инкапсуляцию, code reuse и прочие чудесные вещи. Являясь синтаксическим сахаром, конечно. И запись чуть короче. А еще это - некий общий протокол, которому стараются следовать. Это лучше, чем 5 лет назад: пытались делать context managers, но у каждой работы способ их использования был своим, чуть отличным от других.
С позиции асма любой ЯП - не более чем синтаксический сахар. Только иногда на глазах количество перерастает в качество.
balu
- аннотации лично мне не травятся тем, что аннотируемое может не соответствовать реальным значениям параметров. Можно, конечно, создать и соответствующий декоратор, который будет проверять соответствие типов аннотируемому, но нет никакой гарантии, что его будут применять. Выглядит это, как костыль к объявлению типов.
Аннотируется не тип параметра или возвращаемого значения, а сам параметр “вообще”. Т.е. это как с дескрипторами: можно сделать на них property, а можно - нечто совсем другое.
balu
- генераторные выражения и списочные включения лично меня подкупают только большей скоростью выполнения. Но парсить это глазами мне неудобно. Аналогично и с новой формой записи if/else, плюс Питон давно имел эту функциональность.
Мне читать - привычно. А то, что генераторное выражение является именно expression, а не statement - позволяет включать это где угодно. Упрощая запись. Впрочем, не нравиться - не ешь. Никто не заставляет.
var = a if cond > 0 else b
чуть понятней и менее глюкаво, чем
var = cond and a or b
Более явно, что ли.
balu
ИМХО, не было серьезной причины вносить это в язык. Лично я не вижу большого выигрыша на операциях примерно одной сложности. Хороший пример того, что внесли удачно - это декораторы.
Еще есть как минимум
res = yield a
и
yield from gen()
balu
balu
итераторы, генераторы и метаклассы
А за это я ничего плохого и не сказал. Разве что не совсем простые эти концепции. Но их полезность превышает затраты на них.
Метаклассов должно быть мало, но порой без них сложно обойтись.
Итераторы и генераторы - элементарные и повсеместно используемые строительные блоки.
balu
balu
две несовместимые ветки.
А что тут хорошего? Надо держать в голове фактически 2 разных языка - с 2-ки еще долго многие не слезут, а 3-ка еще мало интересна во многих областях.
Второй ветке массово жить еще полтора-два с половиной года. Потом утвердится тройка, и это меня радует. Помню, то же говорили сразу после выхода Python 2.0
balu
balu
частый релиз-цикл
Ага, очень неприятно, когда из-за этого у тебя что-то отваливается и приходится патчить. Зато имеем нового сахарку. Лично меня вполне устроил бы и релиз языка раз в 2 года - ИМХО самый оптимальный срок.
Отваливается редко и мало, все же. У меня никогда не было больших проблем с миргацией на новую минорную версию. py3k - другое дело, но этот шаг вынужденный. Иногда приходится убирать мусор за собой, и делать это довольно кардинально.
В других ЯП зачастую ситуация еще более веселая.
Кстати, опять же: не нравятся частые релизы - можно брать на использование только каждый четный :) Для согласования внутренних ритмов :)