LINUX.ORG.RU

Зачем Python?

 , ,


5

5

Обычно, ЯП - это инструмент, заточенный для решения задач в какой-то определенной сфере. У создателей ЯП была для него ЦЕЛЬ, которая наполняла смыслом бытие ЯП. Или же ЯП оказался обладателем таких характеристик, которые позволили эффективно решать определенные задачи, даже если изначально на него были другие планы. Это также объясняет необходимость существования ЯП.

Что-то низкоуровневое - Си, Rust, Ada; сервер - PHP, Go (а где-то Java, JS); клиент - JavaScript; энтерпрайз - C#, Java; скрипты для CLI - bash, lua (хотя сойдут PHP или JS); математика - R, Fortran; мобильные приложения - Java, Kotlin, Swift; начальное обучение - Basic, Pascal (можно Lisp, но лучше не стоит). Всё ясно, понятно.

А какие специфические задачи решает Python? В чём его смысл? Вот в (https://youtu.be/KnFrdzG79ak?t=532) МФТИ на информатике говорят, что Python - это классная штука, так как на нём можно всё (и в web, и в смартфон), мол универсальный. Но, имхо, это скорее минус, чем плюс. Это как швейцарский нож - может многое, но всё не очень качественно. В (https://youtu.be/bX3jvD7XFPs) MIT'e перевели обучение с эльфийского (Scheme) на Python. Ну для педагогических целей, для первокурсников, может Python и выглядит лучше. Хотя как аргумент в его пользу - ну так себе.

Пока я вижу, что в реальном мире Python (объективно) нужен для двух задач:

1. Поддержка legacy-кода, уже написанного адептами Python'а. Например, какие-нибудь скрипты для иксов, скрипты для сис.админов и т.п.
2. ML. Просто потому, что под ML были написаны нужные библиотеки (в нужном кол-ве и кач-ве) именно на Python. По неизвестным причинам написаны.

Сфера для (эффективного) применения Python'а очень мала, или мне показалось?

При этом, повсеместно говорят о популярности Python, как это модно-молодежно, его мол и учите. Закрадываются подозрения. А не является ли широкая популярность (или слухи о ней) Python исключительно маркетинговым явлением, когда ЯП, опять же по неясным причинам, проталкивают сверху? Если это так, то для чего это делают? А если не так, и он объективно эффективно решает какие-то задачи (почему его добрые люди и советуют), то объясните какие это задачи, какова целевая сфера применения Python'а, каков его смысл, цель???



Последнее исправление: Edward_I (всего исправлений: 3)

Ответ на: комментарий от dem

За чтож вы PHP так не любите?

кто сказал? где сказал?

PHP, на самом деле, есть за что не любить (хотя в большинстве случаев проблема не в языке, а в программистах), но питон на проверку еще хуже

Ford_Focus ★★★★★
()
Ответ на: комментарий от annulen

Кстати в строковом свитче, который добавили в Java 7, внутри используется обычная рантаймовая хэш-функция, а не идеальная

Звучит нет, тоесть да...

dem ★★
()
Ответ на: комментарий от pynonymous

Итак, кого мы вызвали в конце? Локальную переменную bestf? Глобальную функцию bestf? self.bestf? А что в неё передано в качестве self?

Никого. селф ей не передан

dem ★★
()
Ответ на: комментарий от pawnhearts

Только вот папу так и не назвали....

dem ★★
()
Ответ на: комментарий от Ford_Focus

бенчмарк чего?

Ну покажи задачу (реальную) где Python медленнее PHP. Например загрузка на сервер 1000 фотографий с ресайзом и записью логов в базу.

dem ★★
()
Ответ на: комментарий от pynonymous

Логичнее было бы сделать однообразно, если self есть, то он есть везде, не?

Да, пожалуй ты прав. Пусть безобразно лишь бы однообразно. Чтобы безобразия побороть нужно всю объектную модель питона переделать.

bread
()
Ответ на: комментарий от JAkutenshi

А я пишу. Или я по-твоему все 8 часов должен только и делать что писать код? Через какое-то время, знаешь ли, вместо кода начинает выходить дичь и дописав какую-нибудь функцию я долго пытаюсь понять, а зачем, собственно, я её начал делать. Потом удаляю её, а после этого вспоминаю зачем. Если такое происходит, значит самое время бросить всё и пойти похоливарить. Больше пользы будет, ну или, хотя бы, не будет вреда.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от pynonymous

Питон, вместо борьбы с ошибками, борется с их причиной — говнокодом, приучая писать хороший код. А в хорошем коде и ошибок получается меньше, и заметить их легче.

В Python инкапсуляция без скрытия позволяет каждому набросать monkey(guerrilla) patching а Java нет(только через reflection, а с приходом модулей все стало еще сложнее). Где легче написать говнокод?

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

Python форсирует явно передавать ссылку на контекст, а все другие ООП языки этим не страдают? В чем причина? Python особенный? Или просто из python уже нельзя выкинуть вездесущий self потому как это потребует пересмотреть синтаксис язяка.

Aber ★★★★★
()
Ответ на: комментарий от anonymous

Spring это лучше, чем кодер N за соседним столом, против которого нужно настраивать статические анализаторы чтоб по рукам бил за доступ к приватным атрибутам.

P.S. Слышал что в языках где нет нормальных статических анализаторов практикуют код ревью по таким элементарным вещам. Вот людям собственного времени не жалко.

Aber ★★★★★
()
Последнее исправление: Aber (всего исправлений: 1)
Ответ на: комментарий от crutch_master

Ну, незнай. Я же не призывал всех до туннельного синдрома писать, просто как по мне сей флейм очевидно бесполезен и есть гораздо более приятные вещи. Но тут уже и правда кому как :>

JAkutenshi ★★
()
Ответ на: комментарий от JAkutenshi

сей флейм очевидно бесполезен

Ну почему сразу бесполезен. Во всяком случае это - лучше, чем очередной нацпол тред.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

лучше, чем очередной нацпол тред

Ничем не лучше, тоже самое. Обычный подвид религиозного срача.

oldstable
()

молодец что поднял эту тему, 1к коментов это свидетельство того что он очень нужен. Иногда надо подрывать пуканы приверженцев того или иного языка, если тема будет не особо интересна это знак что действительно не нужен.

vasyan
()

Для сборки Glibc теперь требуется наличие GCC 5 и Python 3.4 или более новые версии (для сборки программ, использующих Glibc, ограничения на версию GCC не накладываются);

vasyan
()
Ответ на: комментарий от pawnhearts

на яваскрипт то?

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

anonymous
()
Ответ на: комментарий от Aber

Python форисирует форматирование, но в Java столько эпичных IDE позволяющие кастомизировать формат как захочется

Да, то есть python приучает к форматированию, а java позволяет форматировать, но не приучает к этому. Java-кодер должен познать это сам, на своём горьком многолетнем опыте, и разработать собственные правила форматирования для своей IDE.

Python форсирует явно передавать ссылку на контекст, а все другие ООП языки этим не страдают? В чем причина? Python особенный? Или просто из python уже нельзя выкинуть вездесущий self потому как это потребует пересмотреть синтаксис язяка.

Не знаю, давайте обсудим! Опишите, каким вы видите код на питоне без self? Выше по треду предлагались примеры, и все они без self выглядели менее логичными и менее понятными. Предложите свой пример!

pynonymous
()
Ответ на: комментарий от Aber

В Python инкапсуляция без скрытия позволяет каждому набросать monkey(guerrilla) patching а Java нет(только через reflection, а с приходом модулей все стало еще сложнее). Где легче написать говнокод?

На Java. Но не из-за инкапсуляции.

Что такое говнокод? Нет, серьёзно, что это слово на самом деле значит? Код который написан плохо? Но что значит «плохо»? Код который вместо нормальных способов использует какие-то дурацкие методы получения результата? Но что такое «дурацкие»? Непривычные? Трудноузнаваемые? Которые нельзя понять с первого взгляда? Вот оно!

Говнокод — это просто код, который хрен поймёшь!

Но не считать же любой сложный код говнокодом? Уточним. Говнокод — это код, который можно переписать так, что он станет понятнее.

А тогда... на java очень легко писать говнокод — из-за её многословности. Отсутствие перегрузки операторов, и конструкции вида:

Map<String,String> m = new HashMap<String,String>();
(против питонового m = {}) делают почти нереальным написание кода вручную. Да, с этим справляются IDE. Поэтому на Java никто не пишет без IDE.

Однако IDE помогают писать код, но не помогают его читать. Из-за огромного количества синтаксического мусора в коде намного сложнее прочесть логику. И тут IDE уже ничего не сделают. Получаеся, что java-код почти всегда читается хуже, чем код на других языках. А в сложночитаемом коде и наговнокодить проще.

PS: из определения говнокода следует: (1) говнокод может считаться «говонокодом» только если есть другой код, делающий то же самое но более понятный, (2) почти любой код на Java - говнокод по сравнению с питоном. Ведь код на Java станет короче после переписывания на питон, а значит его будет легче прочесть и понять.

pynonymous
()

Прототипирование, когда bash мал, а c++ и c не нужны (почти всегда).

peregrine ★★★★★
()
Ответ на: комментарий от pynonymous

(против питонового m = {}) делают почти нереальным написание кода вручную.

Вы сравниваете разные вещи. На питоне это будет m = HashMap().

RazrFalcon ★★★★★
()
Последнее исправление: RazrFalcon (всего исправлений: 1)
Ответ на: комментарий от pawnhearts

Ну - JS на голову выше Python, по крайней мере для веба. Скорость, неблокируемость, воркеры. Ну а так - Java, C#. Если хочется не только стабильно, но и очень быстро - части пишем на С++, выносим за основную кодовую базу). А Ruby - те же яйца, но с качественной реализацией.

silver-bullet-bfg ★★
()
Ответ на: комментарий от pynonymous

В раби вроде без this, и там по-моему собачка для обращения к инстансу. Почему в питоне так нельзя?

anonymous
()
Ответ на: комментарий от pynonymous

делают почти нереальным написание кода вручную. Да, с этим справляются IDE. Поэтому на Java никто не пишет без IDE.

Интересные люди, питонисты. Когда им в морду тычут тем, что копипаст ломает выравнивание и приходится дрочить вприсядку, они заявляют что в пишарме все хорошо (хотя там тоже не всё хорошо). Но тут же засирают жабку ибо «там нельзя без ИДЕ».

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Питорасты пишут в vim/kate, умвр. Давай, попиши мне жабку в виме. Да и потом, весь этот вопрос выравнивания решается выделением мышкой и нажатием таба, допустим без пустой строки вообще никак не догадаться, что и куда ты хотел вставить (особенно когда весь кусок целиком невалидный).

anonymous
()
Ответ на: комментарий от pynonymous

все они без self выглядели менее логичными и менее понятными. Предложите свой пример!

Я уже сказал

уже нельзя выкинуть вездесущий self потому как это потребует пересмотреть синтаксис язяка.

Обязательное self не более чем синтаксический шум от которого уже не избавиться. Рассмотрим синтаксический шум на примере Java, вы привели такой код:

Map<String,String> m = new HashMap<String,String>();
Оправдано раскритиковали, тут дважды декларируется параметризация, хотя видно что компилятору не составит труда вывести тип. В 2014 году вышла Java 8 которая позволила писать короче:
Map<String,String> m = new HashMap<>();
Дизайн языка позволил внести это улучшение и убрать этот ненужный синтаксический шум. А вот обязательный self из python просто так не убрать.

Говнокод это код без структуры, без единых правил оформления, это неправильное именование, это сильно связанные компоненты системы которые невозможно протестировать независимо друг от друга, а не многословность. Пример:

Вот это говногод:

m = {}

а это уже нет:

ownerToPet = Dict[str, str]
Имя подсказывает, что должна содержать коллекция, type hints указывает на принимаемые типы. Многословность убрала неоднозначности и сделал код более очевидным, не нужно смотреть всю логику чтоб понять чем будет заполнена эта коллекция. Надеюсь этот пример ясно показывает, что краткость != хороший код.

Aber ★★★★★
()
Последнее исправление: Aber (всего исправлений: 2)
Ответ на: комментарий от pynonymous

и конструкции вида: ... (против питонового m = {}) делают почти нереальным написание кода вручную.

Да, да. А в питоне/жс/пхп ты наделаешь m = {} везде и сиди разбирайся у кого где какой результат в твоих функциях и кто что передаёт.

Из-за огромного количества синтаксического мусора
(против питонового m = {}) делают почти нереальным написание кода вручную.

Ты проблему ищешь совершенно не там. Типизация всего на свете не мешает пониманию кода, а наоборот. Сразу видно какие где структуры и кто что ждет, чтобы ему передали. Задница там как раз таки и начинается, когда дело до ходит до кастов из Object. Тут проблема в другом: когда-то стройный и отлаженный код приходится рефакторить и это не очень приятно, особенно, когда все структуры перевязаны между собой. Возникает много лишней возни, но это всё оправдано, т.к. на языке с ДТ ты бы это всё отлавливал прямо в рантайме. И плюс ДТ как раз таки в том, что можно наговнякать, именно наговнякать, не заморачиваясь со всякими типами и сознательно опустив всякие проверки. Это очень помогает, когда тебе надо быстро сделать какую-то разовую работу, но чтобы сделать вещь, которая будет надёжно работать и отлавливать все возможные косяки при эксплуатации танцевать с ДТ придётся не чуть не меньше, чем со статикой.

Говнокод — это просто код, который хрен поймёшь!

Ты ничего не понимаешь в говнокоде. 1000 строчная портянка из switch-case, например, предельно понята, но это не делает её хорошим кодом. Цепочка a(b(c(e))) тоже предельно понятна, но абсолютно не понятно кто что возвращает, пока не прочитаешь ВСЕ исходники этих функций. Ты, очевидно, не работал с не своим кодом на этом твоём пистоне.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 2)
Ответ на: комментарий от crutch_master

Что значит не заморачиваясь с типами? В динамике тип всегда конкретный, иного и быть не может. То, что объект тебе вернёт допустимое значение для каста в нужный тип (допустим в инт), это именно что фича каждого такого объекта в отдельности. Ты можешь не проверять когда знаешь что тебе могут вернуть и к какому типу его можно привести (далеко не бесплатная операция). Если, допустим, вместо числового значения в строке внезапно появились буквы, это уже баг и никакого отношения к динамике он иметь не будет.

anonymous
()
Ответ на: комментарий от pynonymous

PS: из определения говнокода следует: (1) говнокод может считаться «говонокодом» только если есть другой код, делающий то же самое но более понятный, (2) почти любой код на Java - говнокод по сравнению с питоном. Ведь код на Java станет короче после переписывания на питон, а значит его будет легче прочесть и понять.

И да, код может быть предельно понятным, но трудно модифицируемым и падучим, благодаря всякому оверинженерингу там, где он не нужен. Короче, не моряк ты в океанах говн.

crutch_master ★★★★★
()
Ответ на: комментарий от no-such-file

Когда им в морду тычут тем, что копипаст ломает выравнивание

Все уже поняли, что ты обосрался, успокойся.

anonymous
()
Ответ на: комментарий от anonymous

Что значит не заморачиваясь с типами? В динамике тип всегда конкретный, иного и быть не может.

Я говорю о сложных структурах к кучей полей/методов, которые создаются на лету. Берешь одну структуру, лепишь на неё сверху другую, выводишь из всего этого третью и т.д.. А с числами/строками и в статике никаких проблем нет, чтобы ради этого городить язык с ДТ.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Я так сохранял текстовое поле, а по факту у меня сохранялся весь объект целиком (2 мегабайта вместо нескольких байт). Вот я протупил тогда, у меня десятки гигабайт скрипт выжирал. Решилось кастом в примитивный тип, потом я обнаружил что там был другой метод возвращающий уже скастованный тип. Скрипт стал потреблять меньше 100 мегабайт (на тех самых данных где десятки гигабайт). Ну, бывает, надеюсь это был первый и последний раз. Надо читать хотя бы справку прежде чем писать код.

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

anonymous
()
Ответ на: комментарий от crutch_master

Типизация всего на свете не мешает пониманию кода, а наоборот.

Нет

dem ★★
()
Ответ на: комментарий от no-such-file

Интересные люди, питонисты. Когда им в морду тычут тем, что копипаст ломает выравнивание и приходится дрочить вприсядку, они заявляют что в пишарме все хорошо (хотя там тоже не всё хорошо).

С выравниванием обычно нет проблем. А уж тем более при копипасте. Даже vim умеет выравнивание при вставке (команды ]p и [p). К тому же юзер после вставки всё равно должен просмотреть код, может и отформатировать его заодно. И не важно, на каком он языке.

А некоторые считают, что копипаста — корень большинства ошибок, и в IDE вообще должна быть запрещена...

Но тут же засирают жабку ибо «там нельзя без ИДЕ».

Позвольте, никто не засирал! Я против IDE ничего не имею. Наоборот, это признак зрелости языка: любой хороший язык должен иметь IDE, помогающую в разработке крупных проектов. Просто в некоторых языках можно обойтись и блокнотом, а в некоторых без IDE тяжело. Java относится к последним.

Само по себе это не хорошо и не плохо, это просто факт. Плохо не то, что жавакод тяжело писать без IDE, а то, что его тяжело читать! Хоть с IDE хоть без.

pynonymous
()
Ответ на: комментарий от pynonymous

С выравниванием обычно нет проблем. А уж тем более при копипасте.

Обычно нужно тщательно следить за выравниванием, тем более при копипасте. В более других языках следить за этим не нужно совсем, лишь бы скобки были сбалансированы. Понятно, что опытные питонщики уже отслеживают отступы на автомате, но вообще это напрягает. Как и висящие в воздухе ступеньки блоков.

bread
()
Ответ на: комментарий от anonymous

В раби вроде без this, и там по-моему собачка для обращения к инстансу. Почему в питоне так нельзя?

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

bread
()
Ответ на: комментарий от anonymous

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

bread
()
Ответ на: комментарий от no-such-file

копипаст ломает выравнивание

Так это же прекрасно. Повод лишний раз перечитать и исправить :)

И кстати, где он его ломает? При выносе повторяющегося куска в отдельную функцию? Работает нормально. При повторении куска в 2 циклах на одном уровне? Тоже нормально. А вот если кусок повторяется на разных уровнях, то имеет смысл внимательно его перечитать.

А неправильное выравнивание быстро лечится вставкой-удалением вертикальных блоков. Vim и FAR так умеют.

question4 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.