LINUX.ORG.RU
ФорумTalks

Ненависть: не люблю Python

 ,


1

4

Как люди программируют на этом языке? ППЦ

По роду деятельности приходится изучать это и после Perl такая тоска накатывает шоппц.

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

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

В нем есть такой вот блок, определяющий подключенные мониторы и их конфиг:

#!/usr/bin/perl

use 5.20.0;
use YAML;

my %list;
open my $fh, '-|', '/usr/bin/xrandr';
while(<$fh>) {
    if (/^(\S+)\sconnected\s+(primary\s+)?(\d+)x(\d+)([+-]\d+)([+-]\d+)/) {
        $list{$1} = {
            name        => $1,
            w           => $3,
            h           => $4,
            x           => int($5),
            y           => int($6),
            primary     => $2 ? 1 : 0
        }
    }
}

print YAML::Dump \%list;

Запускаем - рассказывает о подключенных мониторах в машиночитаемом виде:

---
DP-1:
  h: 1440
  name: DP-1
  primary: 0
  w: 2560
  x: 2560
  y: 0
DP-2-1:
  h: 1440
  name: DP-2-1
  primary: 0
  w: 2560
  x: 0
  y: 0
eDP-1:
  h: 1080
  name: eDP-1
  primary: 1
  w: 1920
  x: 1280
  y: 1440

вроде что может быть проще?

Однако пытаемся переписать это на python и натыкаемся:

  1. что open - не умеет работать с пайпами
  2. что про пайпы велосипедят 100500 модулей
  3. что у строк есть 100500 методов, но работа с регекспами вынесена в какой-то ужасно сдизайненный модуль `re`
  4. что эти 20 строк кода на Python превратятся в 200

и как вы с этим живете, мозахисты?

★★

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

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

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

Ну вот это позволит какое-то время использовать аннотации типов, и прочие плюшки из python4, и запускать скрипты в python4.

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

Предположительно следующая ветка питона. Но без разницы как она будет называться. Возможно и 5, чтобы подчеркнуть всю важность переписывания. Как с 3к в свое время.

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

PEP 484: Type Hints#Non-goals:

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

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

а зачем городить костыли?..

Ну слушай, никто не совершеннен, все совершают ошибки. Не божества же пишут языки программирования.
Взгляни, например, на C++, где совместимость стараются не ломать, при сём почти полностью поменяв представления о том, как нужно писать программы, дважды.
И, к слову о плохих представлениях о том, как надо писать: вызов процесса и парсинг регулярками – банально плохая практика, это путь какого-нибудь башескрипта.
Угадайте что, для Perl это основной подход и есть. Для какого-то спектра задач сие и годно (как и башескрипты), но вот твой код… и с процессом и особенно без реализуется на Python вполне достойчно.

Darth_Revan ★★★★★
()

Одно дин. типизированное дерьмо сравнили с другим дин. типизированным дерьмом.

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

я тут еще короче написал:

#!/usr/bin/perl -l

open my $fh, '-|', '/usr/bin/xrandr';
/^(\S+)\sconnected\s+(primary\s+)?(\d+)x(\d+)[+-](\d+)[+-](\d+)/ &&
print(join("\n\t", "$1", "name: $1", "w: $3", "h: $4", "x: $5", "y: $6", "primary: $2"))
while <$fh>;
Deleted
()
Ответ на: комментарий от Deleted

Чего стоит это обещание?

Это уже вопрос философский %).
Как мне кажется, сам Python не очень располагает к обязательной типизации. Как минимум, в нынешнем виде type hints как нечто обязательное просто не годится.

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

Это уже вопрос философский %).

практика показывает, что 1.х несовместим с 2.х. А 2.х с 3.х. Закономерность, однако.

Как мне кажется, сам Python не очень располагает к обязательной типизации

Когда приходится в питоне обязательно приводить данные к типу, вроде int(data) * float(data), bytes в string и т.п., то реальная необязательная типизация, как в перле, кажется чем-то, что бог прописал.

Deleted
()

Зачем ты пишешь перловскую программу на питоне?

На питоне твоя программа будет выглядеть примерно так:

from Xlib import X, display
from Xlib.ext import randr
d = display.Display()
s = d.screen()
window = s.root.create_window(0, 0, 1, 1, 1, s.root_depth)

res = randr.get_screen_resources(window)
for mode in res.modes:
w, h = mode.width, mode.height
print «Width: {}, height: {}».format(w, h)

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

Ну слушай, никто не совершеннен, все совершают ошибки

в Perl сперва продумывают дизайн и из за этого не меняют его раз в три месяца, как это делает Python

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

Вот и ответ, почему Perl встречается всё реже. Так продумали.

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