Добавлен girvel,
опубликован
Поскольку я исповедую модную идею саморазвития как цели в жизни, я вынужден ее придерживаться и постоянно пробовать что-то новое. Это касается и программирования, которым я в последнее время увлекся чересчур серьезно. Ну, правда, не стоит воспринимать мое саморазвитие всерьез, на самом деле я покодил на C# полгодика, что-то понял, мне стало скучно и я решил попробовать Python, и теперь горю желанием высказывать свое чересчур важное и авторитетное впечатление от сего ЯП.
Начну с положительных сторон
Во-первых, код очень краток по сравнению с C#. Печатать надо раза в два меньше, что скорее непривычно, чем радует, но, наверное, это хорошо.
Во-вторых, код очень читаемый. Из-за краткости, из-за применения отступа в качестве синтаксической конструкции (это ведь так называется?), из-за зарезервированных фунций формата __funcname__, что, к слову, сначала кажется неудобным и некрасивым, из-за четко сформулированных требований к стилю кода и много еще из-за чего. К слову, требования к стилю доходят до отступа между классами и наличия пустой строки в конце файла
Еще есть синтаксическая соль в лице обращения к членам экземпляра из его же метода как
self.x = 0
и явное приведение типов. Говорят, это хорошо.
Порадовали операторы по типу for и in, которые очень упрощают многие конструкции и дают плюс к читаемости, а также генераторы списков, которые выглядят так:
a = [x for x in range(100) if x % 3 == 0]
и, если сравнивать с C#, являются не менее удобной заменой LINQ.
Еще переменной можно присвоить класс, а функция может возвращать сама себя. Это мило и дает непривычную свободу действий, правда, я пока не нашелся, как ее использовать.
И плавно перетеку к отрицательным
Все претензии у меня в основном к некоторым легким неудобствам, чем к серьезным недостаткам. Ну, кроме последнего.
Первая претензия - у методов первым аргументом всегда является self, который пишется только при объявлении функции (не при вызове) и соответствует текущему экземпляру. По сути - просто бессмысленная формальность, что не вписывается в общую картину.
Вторая претензия - нет явного указания типов аргументов. Это пока никак себя не проявляло, но мне кажется, это может добавить некоторых хлопот при отладке.
Ну и та самая серьезная претензия - методы и функции не перегружаются вообще никак. Есть необязательные и именованные аргументы, но этого очевидно недостаточно. Приходится значительно усложнять код там, где можно было бы без этого легко обойтись.
Ну и лямбда у них странная.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Mihahail
Первая: stackoverflow.com/questions/12882317/why-always-add-self-as-firs...
Вторая: зато полиморфизм. Можно писать довольно сильно обобщённый код. Сильно связано с третьей претензией.
Третья: при перегрузке функций выбор подходящей функции осуществляется в компайл-тайм, с помощью проверки типов аргументов функции. Как следствие динамической типизации(тип переменной может меняться в рантайме), выбор из вариантов функций должен происходить в рантайме(как и соответствующие проверки типов, а это оверхед), поэтому классическая перегрузка языкам с динамической типизацией не доступна. Как вариант - есть мультиметоды. Тут явно надо просто изменить мышление, не надо вслепую тащить идеи из таких языков, как С# в питон. Лушче ознакомиться с питоновскими best practices(с помощью stack overflow, например). Там вполне обходятся без перегрузки(которая часто нужна для полиморфизма, который в питоне принято реализовывать иначе).
Отредактирован girvel
А как ты изучаешь? Читаешь многосотнестраничные документации, или книги, или посещаешь занятия?
(Всегда читаю документацию, по-другому не выходит.)
Отредактирован Doc
Как сказали выше, нужно менять образ мышления. Это как с функциональщиной.