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

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

Кто-нибудь из питонохейтеров мне скажет, что даёт switch-case, чего нет в if-elif-else?

Я не питон-хейтер, но скажу, что просто получается более компактная запись. Я б не отказался от свитчкейса в питоне.

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

switch и есть goto

switch не прыгает назад.

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

Аргументы командной строки это роутинг?

какая проблема вызывать методы из свитча?

а зачем нужен свитч если можно просто сделать data = Filters[filter_type](data)?

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

Аргументы командной строки это роутинг?

PHP-фрэймворки отлично умеют в CLI, предоставляя все фичи MVC, в отличии от

а зачем нужен свитч если можно просто сделать data = Filters[filter_type](data)?

вызов функции по содержимому строки? ну в питоне это наверное рабочий вариант - производительность всё равно уже и так ниже плинтуса

и нет, сфера свитча шире

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

Это корутины написанные на самом языке.

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

Просто в C отстойный свитч, в питоне выглядело бы так:

switch name:
   case "a", "b":
      ...
   case "c":
      ...
   default:
      ...

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

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

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

Даааа, поиск в хэш таблице по строке это очень медленно 🤣

предоставляя все фичи MVC, в отличии от

В отличии от чего?

отлично умеют в CLI,

Через свитчи?

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

какая проблема вызывать методы из свитча?

вызов функции по содержимому строки? ну в питоне это наверное рабочий вариант

Песец как ты заврался.

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

Я хочу чтоб мой код выглядел как хочу я, а не какой то сраный astyle

Полностью согласен! Ещё хорошо, когда пришедший на оценку код выглядит как я хочу, а не как хочет его автор или astyle.

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

Ну я и говорю — костыль. И потоков-то при этом всё равно нема.

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

Если коротко, то да. Потому что тупой или потому, что обладал ограниченными ресурсами (что, в общем, одно и то же).

Или ещё проще: тогда это было модно и не понимали почем это плохо. Это как с реализацией ООП в С++.

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

Ты не уловил дух дискуссии. Производительность не нужна. Купи ещё серваков, нищебродина.

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

Или ещё проще: тогда это было модно и не понимали почем это плохо

Я не думаю, что это было модно. Скорее не понимали, почему это плохо, но даже здесь есть сомнения, если вспомнить Аду.

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

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

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

Ну я и говорю — костыль.

Писать на языке — костыль? А встраивать в язык недокорутины не костыль?

И потоков-то при этом всё равно нема.

Корутины — кооперативный мультитаскинг. На этом уровне абстракции тредам места больше нет вообще.

Несколько корутин могут исполнятся одним или несколькими «воркерами». Будут эти воркеры тредами или процессами им без разницы.

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

Ты тоже думаешь что поиск в хэш таблице это очень медленно и свитч бы это соптимизировал?

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

Ты тоже думаешь что поиск в хэш таблице это очень медленно и свитч бы это соптимизировал?

Чел вместо поиска хеша в таблице предлагал switch-case со строками. Ничего там нельзя соптимизировать.

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

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

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

Даааа, поиск в хэш таблице по строке это очень медленно 🤣

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

$filters['type1'] = function(int c) {
    //
}


либо рефлексия, либо хэш с копиями уже объявленных функций

и да, говнокод. я такого даже в PHP не встречал.

Через свитчи?

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

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

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

Потому что работает. Проблемы?

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

В большинстве других языков тебе в этом случае нужен ивент луп, в Go он ненужен, всё асинхронно by design.

Только потому, что эвентлуп на уровне языка. То, что Go даёт сахар из коробки, не значит что это невозможно в других языках.

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

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

встраивать в язык недокорутины не костыль?

Почему «недо»?

На этом уровне абстракции тредам места больше нет вообще

В го есть, и это прекрасно.

Несколько корутин могут исполнятся одним или несколькими «воркерами». Будут эти воркеры тредами или процессами им без разницы

Это всё не нужно, если просто есть потоки.

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

Почему «недо»?

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

В го есть, и это прекрасно.

Нет. Несколько корутин могут исполнятся одним или несколькими «воркерами». В го это треды, как я понимаю.

Это всё не нужно, если просто есть потоки.

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

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

Скорее не понимали, почему это плохо, но даже здесь есть сомнения, если вспомнить Аду.

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

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

Что не так? 99% работы делает компилятор, только и всего. Зато бонусом производительность и накладные расходы сопоставимые с ассемблером.

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

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

Интересно, зачем ты ведёшь дискуссию о том, чего не знаешь? Чтобы все знали, что ты дурак?

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

В highload`е вообще другие проблемы, но производительность cpython узким местом не является.

настолько не является, что дропбокс зачем-то пошёл пилить пистон, но заебался и уволил гвидо - решили, что проще и дешевле переписать на go

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

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

Так я же уже писал, что ещё лет 5 назад альтернив, кроме жабы, и не было. Это теперь есть TypeScript, Go, Rust. А из того что было - питон самый нормальный. А теперь это тупо легаси.

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

Что не так? 99% работы делает компилятор, только и всего. Зато бонусом производительность и накладные расходы сопоставимые с ассемблером.

Потому что любой немного сложный код на C состоит из void* наполовину.

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

Что не так?

О какой типизации идёт речь, если 90% кода - это касты. Тот же питон.

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

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

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

Потому что любой немного сложный код на C состоит из void* наполовину.

Если стоит тип — это статическая типизация, даже если тип — void*.

В C — слабая ститическая типизация. Забодали.

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

Отрицать тормознутость питона - это уже совсем клинка.

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

Тогда в питоне все объекты имеют тип object, ок.

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

Тогда в питоне все объекты имеют тип object, ок.

В питоне все объекты унаследованы от класса object, емнип. Внезапно ты прав.

a = 42
print(isinstance(a, object))  # True
anonymous ()
Ответ на: комментарий от RazrFalcon

Не передёргивай, за весь тред никто тормознутость питона не отрицал.

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

Конкретно в питоне get из дикта быстрее чем if-elif-else, сомневаюсь, что свитч заметно улучшил бы положение, ибо нативный код дикта всё равно будет быстрее.

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

Конкретно в питоне get из дикта быстрее чем if-elif-else

Можешь замерить на го?

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

Это теперь есть TypeScript, Go, Rust.

C# Script еще есть, тоже годная штука кмк. Мне понравилось.

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

Вот нормальный код, отбросив проверку валидности аргументов

class Filters:
  def min_price(data, value):
    return filter(lambda obj: obj.price > value, data)
  def max_price(data, value):
    return filter(lambda obj: obj.price < value, data)

class View:
  def get(request):
    data = get_data()
    if 'filter_type' in request.params:
      data = getattr(Filter, request.params['filter_type'])(request.params['value'])

но на практике во фреймфорках есть которые штуки для этого https://www.django-rest-framework.org/api-guide/filtering/ ты просто задаешь по каким полям модели ты хотел бы фильтрацию и все само делается, в зависимости от их типа и т.п. Можно и кастомное написать, но только если надо.

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

Нет

Только если смотреть с той точки зрения, что корутины должны работать именно так, как сказал ты. Но твоё видение, что должно быть именно так, а фактически реализации бывают разные.

им управлять не дают

Планировщиком не дают, но если тебе нужно определить что именно и когда должно работать, то проблем с этим никаких нет.

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

Эрланг. И в руби хотя бы из коробочные гринлеты были в отличие от питона, хотя это и шило на мыло, конечно. И почему ты не считаешь плюсы?

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

Но твоё видение, что должно быть именно так, а фактически реализации бывают разные.

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

Если ты знаешь что-то ещё — дополни.

Планировщиком не дают, но если тебе нужно определить что именно и когда должно работать, то проблем с этим никаких нет.

Я не критикую, только констатирую. Или я не прав и в го завезли эксплицитный yield?

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