Добавлен , опубликован
Поскольку я исповедую модную идею саморазвития как цели в жизни, я вынужден ее придерживаться и постоянно пробовать что-то новое. Это касается и программирования, которым я в последнее время увлекся чересчур серьезно. Ну, правда, не стоит воспринимать мое саморазвитие всерьез, на самом деле я покодил на C# полгодика, что-то понял, мне стало скучно и я решил попробовать Python, и теперь горю желанием высказывать свое чересчур важное и авторитетное впечатление от сего ЯП.

Начну с положительных сторон

Во-первых, код очень краток по сравнению с C#. Печатать надо раза в два меньше, что скорее непривычно, чем радует, но, наверное, это хорошо.

Во-вторых, код очень читаемый. Из-за краткости, из-за применения отступа в качестве синтаксической конструкции (это ведь так называется?), из-за зарезервированных фунций формата __funcname__, что, к слову, сначала кажется неудобным и некрасивым, из-за четко сформулированных требований к стилю кода и много еще из-за чего. К слову, требования к стилю доходят до отступа между классами и наличия пустой строки в конце файла

Еще есть синтаксическая соль в лице обращения к членам экземпляра из его же метода как
self.x = 0
и явное приведение типов. Говорят, это хорошо.

Порадовали операторы по типу for и in, которые очень упрощают многие конструкции и дают плюс к читаемости, а также генераторы списков, которые выглядят так:
a = [x for x in range(100) if x % 3 == 0]
и, если сравнивать с C#, являются не менее удобной заменой LINQ.

Еще переменной можно присвоить класс, а функция может возвращать сама себя. Это мило и дает непривычную свободу действий, правда, я пока не нашелся, как ее использовать.

И плавно перетеку к отрицательным

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

Первая претензия - у методов первым аргументом всегда является self, который пишется только при объявлении функции (не при вызове) и соответствует текущему экземпляру. По сути - просто бессмысленная формальность, что не вписывается в общую картину.

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

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

Ну и лямбда у них странная.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
20
8 лет назад
Отредактирован Mihahail
0
Я не апологет, но претензии какие-то несерьезные.
Первая: stackoverflow.com/questions/12882317/why-always-add-self-as-firs...
Вторая: зато полиморфизм. Можно писать довольно сильно обобщённый код. Сильно связано с третьей претензией.
Третья: при перегрузке функций выбор подходящей функции осуществляется в компайл-тайм, с помощью проверки типов аргументов функции. Как следствие динамической типизации(тип переменной может меняться в рантайме), выбор из вариантов функций должен происходить в рантайме(как и соответствующие проверки типов, а это оверхед), поэтому классическая перегрузка языкам с динамической типизацией не доступна. Как вариант - есть мультиметоды. Тут явно надо просто изменить мышление, не надо вслепую тащить идеи из таких языков, как С# в питон. Лушче ознакомиться с питоновскими best practices(с помощью stack overflow, например). Там вполне обходятся без перегрузки(которая часто нужна для полиморфизма, который в питоне принято реализовывать иначе).
Хз, лямбда как лямбда. Лично мне не хватает выделения лямбды в коде как отдельной сущности, поэтому я всегда добавляю скобки: f = (lambda x, y: x**2 + y**2)
0
9
8 лет назад
Отредактирован girvel
0
саморазвитие
программирование
Выходит в остальном ты уже далеко ушёл в развитии, либо твои "вкусы своебразны".
А как ты изучаешь? Читаешь многосотнестраничные документации, или книги, или посещаешь занятия?
(Всегда читаю документацию, по-другому не выходит.)
0
21
8 лет назад
0
Mihahail,
  1. По поводу self - ну, оправдываться "явное лучше неявного" в случае питона немного неверно, поскольку это язык с динамической типизацией и в нем явное не имеет такого значения
  2. По поводу обобщенности кода не подумал, ок. Но все равно было бы удобнее, если бы можно было бы указать список типов для аргумента, под который он должен подходить.
  3. Мультиметоды какие-то костыльные, а перегрузку, опять же, можно было бы реализовать через указание для некоторых аргументов возможных типов
Eltilas, ну, программирование очень сильно развивает мышление в целом. Изучаю в основном на практике, в чтении документации себя не нашел. Но также занимаюсь рисованием пикселей, игрой на гитаре, написанием сценариев, а также попытки что-то понять в западной философии, но времени мало и все такое.
2
29
8 лет назад
Отредактирован Doc
2
Претензии совершенно не понимающего концепции языка человека, честно говоря.
Как сказали выше, нужно менять образ мышления. Это как с функциональщиной.
2
20
8 лет назад
2
girvel, обрати внимание на Haskell, если интересует развитие мышления. Так же будет очень интересно почитать, какие претензии ты придумаешь к нему)
Чтобы оставить комментарий, пожалуйста, войдите на сайт.