LINUX.ORG.RU
ФорумTalks

Питон здорового человека

 ,


1

3

Ahoi!

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

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

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


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

Ну так как не приведены сравнения с youtube-dl, то попробую посчитать эффективность сам.

Для youtube-dl 125474/1236 = 101 строк на один экстрактор

Для lux на Go 9547/38 = 251 строк на один ресурс

Примерно в 1.5 раза больше строк на Go, возможно эффект масштаба, но видно что Go не позволил значительно сократить количество требуемых строк, или ускорить разработку что бы сделать поддержку хотя бы сотни ресурсов.

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

как на Clojure будет выглядеть эта строчка

При условии что мы определим все те же самые функции вызов будет что-то вроде такого (за компиляемость не ручаюсь)

(-> 
 (nth f_list i)
 (split "\t")
 (nth 1)
 (subs 3)
 int
 kib_to_mib
)
no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Тут явно не хватает реакции «держится руками за голову и орёт»

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

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

Попробуй mypy, pyright итд, или уже пробовал, как ощущения?

Сравнивать питон с кобол - это топ. В самом деле, не с JS или Ruby же сравнивать, чтоб не позориться.

Но ты же сказал на чем угодно, ну ладно, давай возьмем JS, тот же вопрос что и про COBOL задаю.

А эти неджуны они прямо сразу неджунами родились, или может учились где?

Где то учились, потом написали на питоне либу.

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

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

vm_swap = kib_to_mib(int(f_list[i].split('\t')[1][:-3]))
(-> (nth f_list i) (split "\t") (nth 1) (subs 3) int kib_to_mib)

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

А что не так? По-моему даже более читаемо, не нужно смотреть кто на ком стоял, все операции последовательно расписаны. Можно и как везде завернуть в скобочки, но ведь кажется кое-кто хотел именно к скобочкам и докопаться.

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

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

Кто-то ухитряется при этом восхвалять write-only перловку, кому-то по душе с++ с его шизофреническим стандартом на тысячи страниц, кто-то и вовсе на шелле предлагает код писать. Люди, да что с вами со всеми? Это флешмоб какой-то?

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

Это юношеский максимализм, иногда переходящий в явление, известное как МД.

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

Выразительный

Нет. Кусок говна со специальным сахаром на каждый чих.

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

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

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

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

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

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

«Мы придумали декораторы, лишь бы не использовать лямбды.»

А про хорошую читаемость питона может говорить только тот, кто пишет write-only код, и кому этот код потом за другими рефакторить не приходилось.

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

Порядок действий перепутан

В смысле?

синтаксис не от мира сего

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

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

В смысле?

В прямом, посмотри на исходную строчку на пайтоне.

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

Ассемблер как идеал. ЧТД.

Ну для скрипткидди конечно непривычно.

Вопрос не в привычности, вопрос в читаемости. Её - нет.

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

В прямом, посмотри на исходную строчку на пайтоне.

Так это в строке на питоне «порядок действий» не по порядку. А в примере на лиспе он по порядку и есть.

Вопрос не в привычности, вопрос в читаемости. Её - нет.

Вопрос именно привычки. А то так можно сказать, например, что и в турецком нет читаемости, потому что там синтаксис не как в русском.

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

Примерно в 1.5 раза больше строк на Go

Возможно, это потому что библиотек напитонено на все случаи жизни, и очень сладких?

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

Кто-то ухитряется при этом восхвалять write-only перловку

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

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

посмотри на исходную строчку на пайтоне

Смотрю, и какая по твоему там первая операция?

Вопрос не в привычности, вопрос в читаемости. Её - нет.

Это вопрос привычности. Более того, если писать как надо, а не лапшу, то каждаю операцию можно определить заранее с каким-то осмысленным называнием. Тогда будет вообще красиво, типа

(-> 
 (nth f_list i)
 get-tokens
 first
 get-siffix
 int
 kib_to_mib
)

Скобочек даже меньше чем в питоне, внезапно.

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

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

«Мы придумали декораторы, лишь бы не использовать лямбды.»

Но ведь в питоне есть лямбды, не?

А про хорошую читаемость питона может говорить только тот, кто пишет write-only код, и кому этот код потом за другими рефакторить не приходилось.

Прогони код через mypy и flake8. Они объяснят тебе в каких строчках ты сделал говно.

P.S.: на питоне можно писать в стиле херак-херак-from-typing-import-Any. А можно строго, когда даже просунуть куда-нибудь None можно только умышленно и где тебя заставят соблюсти все декларации типов

no-dashi-v2 ★★★
()
Ответ на: комментарий от pekmop1024

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

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

Кто-то ухитряется при этом восхвалять write-only перловку, кому-то по душе с++ с его шизофреническим стандартом на тысячи страниц, кто-то и вовсе на шелле предлагает код писать. Люди, да что с вами со всеми? Это флешмоб какой-то?

https://www.codingem.com/wp-content/uploads/2022/12/traditional-for-loop-to-one-line-list-comprehension-with-if-else.png

сцук, после этого еще жаловаться на перловку

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

Так это в строке на питоне «порядок действий» не по порядку. А в примере на лиспе он по порядку и есть.

Хм. Улыбнуло.

Вопрос именно привычки. А то так можно сказать, например, что и в турецком нет читаемости, потому что там синтаксис не как в русском.

В турецком всё хорошо и с читаемостью и синтаксисом. Очень понятный язык. В отличие от приведенного выше примера.

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

Все рукожопы давно сбежали на пых с питоном.

вот и выяснилось, откуда засилье рукожопов в питоне – воспитаны перлом!

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

Что там у тебя по ссылке, я не знаю, оно не запускается.

package main

import "fmt"

var foo string = "2"

func main() {
	foo = foo + 1
	fmt.Println(foo)
}
./prog.go:8:8: invalid operation: foo + 1 (mismatched types string and untyped int)

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

Для меня главный аргумент - что я когда вижу чужой код, автор которого не клал на PEP’ы совсем уж основательно, мне он понятен. Код я писать начал, когда никакого пайтона еще не придумали, если что. И видел многое.

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

В турецком всё хорошо и с читаемостью и синтаксисом. Очень понятный язык. В отличие от приведенного выше примера.

В турецком синтаксис строится последовательно, без перескоков как индоевропейских языках. В лиспе тоже синтаксис строится последовательно, без перескоков как в традиционных ЯП.

Но турецкий читаемый, а лисп - нет. Как-то нелогично.

wandrien ★★
()

У здорового человека здоровый питон. Гигиена великая вещь.

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

«Да, но нет» (с)

Всё есть. Кому нравится, тот пользуется, кому не нравится - тот не пользуется. То же самое и с list comprehensions. Понимаешь, в пайтоне тебя никто не заставляет страдать - тебе просто дали инструмент, которым ты пользуешься сообразно своей задаче, а не возводишь это в ранг искусства, поплевывая на ремесленников, пишущих 95% того, чем ты пользуешься.

pekmop1024 ★★★★★
()
Ответ на: комментарий от shell-script

Тебе скинули доказательство, что в статически типизируемом ЯП Rust есть такая штука как «shadowing», когда одному идентификатору можно присвоить значения разных типов. И компилятор это не считает ошибкой. Фича спорная, но язык от этого не перестает быть статически типизированным. Но суть не этом, а в том, что ты просто не знаешь значения понятия «строгая типизация», зато срёшь тут с умным видом. А, да - твои примеры на питоне и на Го не равнозначные, смухлевал ты.

Virtuos86 ★★★★★
()
Последнее исправление: Virtuos86 (всего исправлений: 1)

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

babashka

для разработки всякой мелочёвки, когда божественная Java слишком мощна.

babashka

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

Кому нравится, тот пользуется, кому не нравится - тот не пользуется.

Вот никто и не пользуется. Но формально да, они есть. Можно показать пример с ними в учебнике. Букварь-ориентированный ЯП.

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

Понимаешь, в пайтоне тебя никто не заставляет страдать

Не, не так.

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

А в питоне неизменно приходится страдать. Писать на этом языке органически неприятно, а править чужой код - неприятнее вдвойне. Особенно когда костыли под видом «хороших практик» суют учащим питон, и они потом этим пользуются. Разработка на питоне - это не тот опыт, который я буду вспоминать с удовольствием. Ну разве что с удовольствием в плане «я смог, я преодолел и это».

wandrien ★★
()
Ответ на: комментарий от shell-script

Сложил int с int. И… Что мне должен показать этот пример? К чему в начале str был, если всё равно потом переопределил — вообще не понять…

Иди читай матчасть, чем строгая типизация отличается от нестрогой. Можешь заодно ещё почитать, чем динамическая типизация отличается от статической, чтоб два раза не вставать, а то сдаётся мне, в голове каша.

На всякий случай: Типизация бывает строгой и нестрогой (это один признак), помимо этого она бывает динамической и статической (другой признак), в языке может быть любое сочетание этих признаков. Конкретно в питоне — строгая динамическая. В C++, например, нестрогая статическая. В Java — строгая статическая. В JS — нестрогая динамическая.

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

Не может быть, а как же жить без польской нотации, это же невозможно?! И без лямбд, с этими ужасными генераторами списков?! А декораторы, голова просто взрывается!

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

Вот никто и не пользуется. Но формально да, они есть. Можно показать пример с ними в учебнике. Букварь-ориентированный ЯП.

«Это всем известный факт», угу. Давай доказывай, что не пользуются. Бремя доказательства лежит на уверждающем. А то вон мой коллега, за авторством которого одна из внутренних либ написана, пользуется - ему, видимо, забыли рассказать, что в пайтоне лямбды для учебника.

А в питоне неизменно приходится страдать. Писать на этом языке органически неприятно.

Органически неприятно - это когда у тебя от расставления скобочек пальцы после рабочего дня болят так, будто ты ими всех эйчарок по очереди осчастливил.

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

Я вообще страстный фанат декораторов, да. Особенно люблю их для retry logic.

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

И как на Clojure будет выглядеть эта строчка? https://github.com/hakavlad/nohang/blob/master/src/nohang#L1236

Ну в общем-то, если уж на чистоту говорить, то «академически» вся эта функция ужасна, от начала и до конца - начиная с возврата None и заканчивая использованием range(). Это как раз классический пример «программы от админа».

no-dashi-v2 ★★★
()
Ответ на: комментарий от pekmop1024

Органически неприятно - это когда у тебя от расставления скобочек пальцы после рабочего дня болят так, будто ты ими всех эйчарок по очереди осчастливил.

«Может надо взять нормальный текстовый редактор?» (с)

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

Что не так в моих примерах? Где различие?

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

package main

import "fmt"

func main() {
        var foo string
	foo = 2
	foo = foo + 1
	fmt.Println(foo)
}
И питоновскую версию я сделал именно так же. Объявил переменную определённого типа, присвоил значение, выполнил операцию, вывел на экран.

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