LINUX.ORG.RU
ФорумTalks

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

 ,


1

3

Ahoi!

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

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

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


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

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

А в функциональных языках последовательность выполнения вообще зависит от последовательности написания?

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

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

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

Давай на питоне сделаем?

$ cat demo.py

a: str

a = 2

a = a + 1

print(a)

$ mypy demo.py

demo.py:2: error: Incompatible types in assignment (expression has type «int», variable has type «str») [assignment]

demo.py:3: error: Unsupported operand types for + («str» and «int») [operator]

Found 2 errors in 1 file (checked 1 source file)

Упс.

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

И питоновскую версию я сделал именно так же. Объявил переменную определённого типа

В питоне нет переменных определенного типа. В питоне есть объекты определенного типа. Покажи, что питон позволяет складывать яблоки с апельсинами, давай. В том коде на питоне, что ты запостил, в var лежит 2, потом ты складываешь 2 и 1. Где тут ошибка?

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

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

https://www.youtube.com/watch?v=7iM4KpjwrR8

./prog.go:8:8

Это не связано с типизацией

Вот тебе простая статья https://mathieularose.com/python-variables в Rust похожая ситуация, поэтому мой код из playground компилируется.

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

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

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

Возможно, я не проводил такое глубокое исследование, но это значит что wandrien ошибался в своем утверждении.

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

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

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

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

Тем не менее лямбды питона это такая бесполезная хрень

Так мы ждем раскрытия темы, а то «всем это известно» такой себе аргумент.

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

Вспомнил, как-то Лавсан или кто-то из борщевиков писал, что придумал именованные лямбды в борщелиспе, вроде как удобнее при отладке. Так что я бы не переоценивал лямбды 😁

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

Каждый верит во что хочет. Я вот, например, продвигаю Всеобщую Теорию Кота.

Это никак не мешает моему ремесленному применению пайтона.

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

Как он превратился в int?

Прямой заменой объекта типа str объектом типа int. Не все наверное в курсе, что в пайтоне все есть объект, примерно как в юниксе - все есть файл.

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

Что мешает использовать Type hinting, который поддерживается с 3.6? Как минимум он помогает PyCharm в подсказках и статическом анализе. А в 3.11/3.12 будет помогать оптимизациями. Может пора?

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

Пока ты не начнешь читать, что тебе пишут, дело не сдвинется. Повторяю: в Питоне нет переменных, как в статически типизированных ЯП. У var нет никакого типа! Типы есть у объектов и примитивных значений, у переменных типов нет.

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

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

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

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

Повторяю: в Питоне нет переменных, как в статически типизированных ЯП. У var нет никакого типа! Типы есть у объектов и примитивных значений, у переменных типов нет.

Поздравляю. Это называется динамически типизированный язык.

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

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

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

Это ты ему объясни, умник. Вот прямо сейчас ему напиши, и он, я тебя уверяю, понятливо покивает головой. Но это неточно.

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

Это никак не мешает моему ремесленному применению пайтона.

Мне в целом ничего не мешает писать на любом ЯП, на котором платят за это деньги.

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

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

ты просто не знаешь значения понятия «строгая типизация»

И каково же значение этого понятия по-твоему?

твои примеры на питоне и на Го не равнозначные, смухлевал ты.

Вот тебе код на питоне, равнозначный его коду на go

foo = "hello"
foo = foo * 3
print(foo)
javascript
()
Ответ на: комментарий от javascript

Вот тебе код на питоне, равнозначный его коду на go

Ты это серьезно? Если ты не в курсе, что для типа строка в питоне определена операция умножения на число, то это от неграмотности, просвещайся.

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

Крайне читаемо по сравнению с Perl

Действительно, для примера возьмем код из популярного проекта на Perl:

$c = sub { return (($_[1]-$_[0] == 1) ? ($c->(@_[1..$#_]),$_[0]) : $_[0]); };
map {$gap_hsh{$_->[0]}++} grep {$_->[1] =~ m/[$gapchar]/}

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

Возможно, но это не значит что нету статический типизации.

MOPKOBKA ★★★★★
()

А мне вот руби нравится, и даже clojure в чем-то забавный, но нет желание тратить на них время, особенно когда постоянно работаешь с такими штуками как Java/Kotlin/C# или еще что-то в этом роде…

Например недавно я опять начал смотреть clojure, потом опять на ruby, потом вдруг переключился на Dart… . Короче, вместо делания чего-нибудь полезного я опять прокрастинировал два дня подряд!!

В итоге у меня вся автоматизация на bash.

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

Нет таких правил

Неужели? Интерпретация true и false в if зависит от фазы луны? Арифметика при смешении целых и вещественных значений работает от балды? Было бы прикольно, но правила таки есть. И неявные приведения тоже.

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

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

Ты определение строгости типов в языке дашь или нет?

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

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

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

Для сравнения, чтобы далеко не ходить, возьмём код, который я уже цитировал в одной своей теме:

if not self.site.connection_server.tor_manager.enabled:
    trackers = [tracker for tracker in trackers if ".onion" not in tracker]
trackers = [tracker for tracker in trackers if self.getAddressParts(tracker)]
if "ipv6" not in self.site.connection_server.supported_ip_types:
    trackers = [tracker for tracker in trackers if helper.getIpType(self.getAddressParts(tracker)["ip"]) != "ipv6"]

Тут-то всё лучше, ага.

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

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

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

Сам не люблю list comprehensions, читаемость от них страдает.

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

Это мой личный опыт и личные мои выводы. Имею право ими делиться. А как к этому относиться - личное дело читающего.

Для меня python и php делят первое место в списке отвратительного дизайна языка. И на обоих я писал достаточно.

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

Чудак, (строка * число) это вызов метода объекта типа строка. То что считаешь здесь число объектом другого типа, это твои проблемы. Единственное, что можно здесь предъявить питону - это неудачный «сахар» выбранный для данной операции. Ну так и «+» для конкатенации тоже такое себе. Попробуй умножить на float, что, работает?

А определение строгости типизации читай в википедии.

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