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'а, каков его смысл, цель???

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

В других языках в тех же случаях тебе как пользователю прилетит сегфолт или nullpoiterexception.

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

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

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

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

Ещё у машинных кодов снизу микрокоды выросли.

У меня язык не поворачивается называть язык, в котором я глазами слежу за памятью и при случае динамично генерировал машинный код — высокоуровневым.

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

Си кстати считается высокоуровневым и сегодня, как и раньше.

«Раньше» для Си даже изобрели термин «язык среднего уровня».

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

По-моему даже kwrite в kde телепатией угадывет

Ну ну

if bla bla:
   more bla 

   <курсор тут>
А теперь угалай мне, лалка, куда я хочу вставить кусок кода, туда где стоит курсор (внутрь if) или уровнем выше (на уровень if).

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

В том случае, о котором говорил я

Ты говорил о случае, где погромизд/мейнтейнер накосячил и выкатил нерабочий софт пользователям, нет?

И, прикинь, есть языки, в которых nullpointerexception-ов не бывает.

Ну так и использовал бы софт написанный на них. Или его на них таки не написанно?

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

Ты говорил о случае, где погромизд/мейнтейнер накосячил и выкатил нерабочий софт пользователям, нет?

Нет. Я говорил о случае, когда в программе осталась ошибка, элементарно отлавливаемая статической проверкой.

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

отступы/выравнивания

Это разные вещи. Отступы — только табы. Выравнивание — только пробелы.

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

А теперь угалай мне, лалка, куда я хочу вставить кусок кода, туда где стоит курсор (внутрь if) или уровнем выше (на уровень if).

Что тут угадывать... ты всегда хочешь вставлять текст туда, где стоит курсор.

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

если пролюбил выравнивание

Как? А если ты забудешь скобочки поставить, то сидеть и догадываться не придётся?

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

Примерно тем, чем было плохо ООП в php 4.

Очень подробный ответ. Изучите PHP4, чтобы понять, чем плох Python.

ls-h ★★★ ()
Ответ на: комментарий от aquadon

Python - это второй лучший язык для любой задачи.

То есть для скриптов лучше использовать bash? Ну бред же.

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

Я говорил о случае, когда в программе осталась ошибка, элементарно отлавливаемая статической проверкой.

Принято.

У меня за лет пять питоноразработки такая ошибка всплыла один раз, при рефакторинге просрали.

Теперь ты напиши как часто ты такие ошибки встречал, мы сумму поделим пополам и поговорим об определении слова «редко».

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

Хочу посмотреть, как он на Js системные скрипты пишет. Ну и как развесистый фронтенд для эмбеддед

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

Я говорил о случае, когда в программе осталась ошибка, элементарно отлавливаемая статической проверкой.

Принято.

У меня за лет пять питоноразработки такая ошибка всплыла один раз, при рефакторинге просрали.

За пять лет разработки - одна ошибка несоответствия типов? Ты даже не с другой планеты, ты из какой-то другой Вселенной.

Теперь ты напиши как часто ты такие ошибки встречал,

Десятки каждый день. Консервативно, если по 20 каждый день, то за 10 лет - 20*250*10 ==50000.

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

Ты даже не с другой планеты, ты из какой-то другой Вселенной.

Какие сомнения гложут местных аборигенов?

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

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

vertexua ★★★☆☆ ()

Python набрал популярность во времена моего детства за счёт гораздо большей выразительности, чем тогдашний мейнстрим (да и сегодняшний, по большому счёту). Тот стрип с XKCD про import antigravity, который мне лень искать, хорошо описывает ощущения, когда после какой-нибудь Java начинаешь играться с Python. Беда только в том, что эта выразительность достигалась не только за счёт батареек и интересных абстракций в языке, но и за счёт динамической типизации.

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

Устал и не дочитал до конца?

В принципе, согласен, только иногда он может соревноваться за первое место.

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

А если ты забудешь скобочки поставить

Скобочки ты поставить не забудешь, IDE будет на непарные скобочки ругаться (да и интерпретатор тоже). А в питоне ни один libastral не скажет, тут у тебя реально блок закончился, или это косяк.

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

Процитированные.

Веб на джанге. Агрегация данных из разных мест со статистикой и отчётами. Заигрывания с умным домом. Кучка разных тулзов.

Одна.

Кто ты, блджад?

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

Никто не умер

Да, но это постоянно требует внимания.

а потом ты поменяешь на то что ты хотел

Потом ты не вспомнишь, что ты в этом месте хотел, придётся изучать код. Только огромные дозы упорина не дают питонистам признать, что двигать код туда-сюда на питоне довольно муторно.

no-such-file ★★★★★ ()

Ни у чего нет цели. Он просто есть, как и ты. Какую цель ты ему придумаешь, такую он и будет исполнять, как и ты (твоя туша). Питон, это язык общего назначения, а за подробностями в Гугл.

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

Скобочки ты поставить не забудешь, IDE будет на непарные скобочки ругаться (да и интерпретатор тоже).

Жабоскрипт, какая-то либа для диаграм. Чел рисует какой-то граф. Половина графа — ок, другая — дерьмо.

Оказалась банальщина типа:

if (a >= 0) {
  b()
  c()
} else
  d()
  e()
anonymous ()
Ответ на: комментарий от tailgunner

Код не писали вчерашние плюсовики? Никогда бы не поверил, но приходится.

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

Скобочки ты поставить не забудешь, IDE будет на непарные скобочки ругаться (да и интерпретатор тоже). А в питоне ни один libastral не скажет, тут у тебя реально блок закончился, или это косяк.

Суть в том, что важно не чётное число скобочек, а их позиция.

Так-то питон тоже на много чего ругнётся:

if a >= 0:
do()

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

Код писал вчерашний, сегодняшний и завтрашний сишник. Но, в общем, это неважно. Я готов еще поверить в «ошибки с несовпадением типов не каждый день встречаются», но «одна за пять лет» - это байки из склепа в параллельной Вселенной.

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

VSCode и не мучайся

Ради интереса потыкал (ну а вдруг). Нет, те же яйца вид сбоку.

Вырезаем

    def show():
        print(x)
Пробуем
    def incAndShow():
        inc()
        show()
    |<пробуем вставить сюда чтобы сделать вложенную функцию>
Получаем
    def incAndShow():
        inc()
        show()
    def show():
        print(x)            
Упс, не то. Ладно
    def incAndShow():
        inc()
        show()
        |<пробуем вставить сюда чтобы сделать вложенную функцию>
Получаем
    def incAndShow():
        inc()
        show()
        def show():
        print(x)  
ЛОЛ. Что нужно накатить чтобы оно нормально вставляло? (Водку/траву не предлагать).

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

ум в пишарме вр. vsc не завезли.

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

Так-то питон тоже на много чего ругнётся:

if a >= 0:
do()

Да да, как в примере как я только что привёл. Теперь представь что ты такой вставил вот этот кусок, а дальше у тебя продолжается код

if a >= 0:
do()
something()
more()

Если ты сию секунду, не отходя от кассы не нажмёшь отмену, то подом будешь долго медитировать, где у тебя кончается то что ты вставлял, а где код который был.

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

Всё просто, в конце блока пустая строка (или -1 таб даже можно), значит, он закончился.

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

Я готов еще поверить

Ты верь или не верь, как хочешь, а расскажи как они у тебя выглядят и откуда берутся.

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

Теперь представь что ты такой вставил вот этот кусок

В чём проблема-то? Ты скопировал кусок со всеми отступами.

    if a >= 0:
        while foo:
            do()

Берём из куска первую строку. Считаем сколько в ней пробелов в начале. Выкидываем это число пробелов из каждой строки.

if a >= 0:
    while foo:
        do()

вставляем сюда

    def something():
        def ololo():
            | <- курсор, блджад

При вставке считаем, сколько пробелов от начала строки до курсора. Округляем до ближайшего кратного четырём. Если синтаксис не сходится. Добавляем это число пробелов в каждую строку в буфере.

            if a >= 0:
                while foo:
                    do()

Вставляем от начала строки.

    def something():
        def ololo():
            if a >= 0:
                while foo:
                    do()

Всё. Самое забавное, что любая ide это умеет делать, потому что вставляемый код надо таки форматировать. Чорная-чорная магия.

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

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

Курсор стоит обычно в начале кода, а не вначале строки. Кроме того вырезать иногда нужно не целиком строку (типа начало допишу другое) и т.п.

if |{вырезаем отсюда, вместо if будет while} a >= 0:
    while foo:
        do()


while a < 0 |{вставляем сюда}
    other()
    code()
    if a = 3:
        toBlendIn()

Добро пожаловать в ручной пердолинг. В т.ч. в пишарм.

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

Курсор стоит обычно в начале кода, а не вначале строки.

Хорошо, отступ у первой строки не верный. Добавляем в первую строку отступ как во второй, если в первой строке if и остальные с двоеточием в конце — отнимаем четыре пробела.

Я без понятия как ide это делают на самом деле, посыл — они уже это делают, астрал не нужен.

Кроме того вырезать иногда нужно не целиком строку (типа начало допишу другое) и т.п.

Обвёл, скопировал, вставил как обычный текст. И при чём тут питон?

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

если в первой строке if и остальные с двоеточием в конце

И таких костылей должно быть 100500, а ещё лучше вставлялка должна парсить код в буфере (не валидный в т.ч.), код куда вставляешь и понимать исходя из ситуации, что делать с отступами и (через libastral) хочешь ты добавить вложенность, или нет.

И да этого нет ни в какой IDE.

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

И таких костылей должно быть 100500,

Расскажи мне пять годных и ты победил.

а ещё лучше вставлялка должна парсить код в буфере (не валидный в т.ч.), код куда вставляешь и понимать исходя из ситуации, что делать с отступами и (через libastral) хочешь ты добавить вложенность, или нет.
И да этого нет ни в какой IDE.

Вообще это и есть то, на чём пытаются выезжать jetbrains, не? Мы распарсили ваш код и умно с ним работаем, мы круты.

Таки всё, что ты напостил у меня в пишарме вставилось.

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

всё, что ты напостил у меня в пишарме вставилось

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

и ты победил

Я победил когда ты начал корректировать костылями свой «алгоритм выравнивания» под конкретные примеры.

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

Отступов добавь туда-сюда здесь
Я же проверил - не выравнивает.

Я без понятия что ты там проверял и куда добавить отступы. Посреди условия что-ли? Давай подробней, как воспроизвести.

Я победил когда ты начал корректировать костылями свой «алгоритм выравнивания» под конкретные примеры.

Ты победил, когда мне понадобится более полдюжины костылей. А не когда я поправил ошибку в ни разу не проверенном алгоритме высосанном за минуту из пальца.

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

Я видел. И видел как у immutable.js `.get` (и прочие смежные методы) возвращал `any`, т.к. технически невозможно было это реализовать на TS, ржал и плакал как сучка, когда увидел (p.s. для flow ровно такая же дичь была).

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

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

Плюс выразительность, зачем мне пайтон, когда я могу одной строчкой развернуть то, что на пайтоне пишется тупой лапшой в 5 и более? Какие-нибудь child-process - это вообще неудобно. На Perl можно прям как на bash `ololo some child command` и stdout сразу в результат выйдет, например в переменную или аргумент к функции.

Плюс короткие однострочные команды на Python писать очень неудобно, крайне я бы сказал, вот на Perl я могу `blabla | perl -pe «s/foo/bar/g»' или ещё чего, чтоб не писать гору текста и автоматом читать из stdin и писать в stdout для каждой строки. Вот для интереса - напишите на Python эквивалент этой маленькой и простой перловке: `blabla | perl -pe «s/foo/bar/g»'`.

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

На Perl можно прям как на bash `ololo some child command` и stdout сразу в результат выйдет, например в переменную или аргумент к функции.

Или выдачу из пайпа команд обрабатывать построчно в цикле. А так же шелловые фичи типа $? работают

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

И не говори, вот по халтуре какой-то обычный проектик на react.js, там и по зависимостям-то скромно, но полгига, - распишитесь и положите:

du -h node_modules/ | tail -n1
517M	node_modules/
Прекрасный и радужный мир говноскрипт. Ваши SSD, CPU и RAM не будут простаивать даром!

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

А я и не верю, я не первую пятилетку работаю в ИТ, я знаю как это бывает.

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

Вот для интереса - напишите на Python эквивалент этой маленькой и простой перловке: `blabla | perl -pe «s/foo/bar/g»'`.

Для регулярных выражений у меня есть sed, нафига тут перл?

Интереса ради, rev однострочником на перле написать осилишь?

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

видел как у immutable.js `.get` (и прочие смежные методы) возвращал `any`, т.к. технически невозможно было это реализовать на TS, ржал и плакал как сучка, когда увидел

Но ведь...

https://github.com/facebook/immutable-js/blob/master/type-definitions/Immutab...

get<NSV>(index: number, notSetValue: NSV): T | NSV;
get(index: number): T | undefined;

Или это были другие get?

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

Когда у тебя в одном предложении всречаются «Pascal» и «лучше», становится понятно, что твои вкусы немного специфичны.

Pascal действительно лучше многих (может даже большинства) ЯП для обучения. Он для того и создавался. Что не так? Никто не сравнивал Pascal и другие ЯП относительно продакшена.

Статическая типизация + (возможность использовать) указатели делают его весьма ценным ЯП, с точки зрения педагогики. С ним можно нормально освоить фундаментальные вещи - переменная, память, структуры данных. Потом не будет сложностей, у неокрепших умов, с освоением Си и недоумений относительно передачи по значению/ссылки, garbage collector'a и т.п. в других ЯП.

И программирование - это не чисто абстрактное ремесло, чтобы всё прятать за упрощениями Python'a. Оно имеет прямую связь с физическим миром, c железом.

Edward_I ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)