LINUX.ORG.RU

накидайте .... критики(ага) - в python pet-проект

 , , , ,


0

2

https://github.com/press-magvoda-ru/a1

для лучшей шелковистости и ридибилити прошу содействия в части чё поправить

благодарю за конструктив

upd: ruff 2(оказалось не все были от'ruff'ено форматером)

upd2: +readme.md - для большего фидбека по косякам во всём остальном - сам md файл ща - чисто для продолжения сбора грабель в остальном проекте - подлежит как и остальной проект тотальному ре фа кт ор ин гу

upd3: докстринги из жабы из ? из clu ? (Лисков Б., Гатэг Дж. - Использование абстракций и спецификаций при разработке программ (1989, Мир) )

Лискова 2002 али 2008?

★★

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

Что мешает его использовать? Хотя всё равно не очень понятно, зачем. Читаемость от этого не улучшается, даже если код (условно) безопасен.

anonymous
()

C:\Users\1\Downloads\Zall_МЭК\wrk\a\z

Зачем пушить в репозиторий путь к твоему хомяку?

Где README?

не знакомых визави

У меня парсер сломался.

Tanger ★★★★★
()

Где зависимости через pyproject.toml? Где лок файл в виде poetry.lock/pdm.lock/requirements.txt? Почему вывод идет через print, а не стандартное логгирование/loguru? Почему у файлов и переменных совершенно нечитабельные названия? Почему всё оформлено хотя бы не по PEP-8? Почему очень много повторяющихся строк кода? Где файл среды или конфигурации, ибо в коде куча магических путей? Где типизация? Где обработка ошибок не в виде except Exception?

ac130kz ★★
()

Где документация с примерами использования, где хотя бы requirements.txt ? Как этим пользоваться и зачем? А пока что нечего там смотреть, можешь наложить этот проект на govnokod.ru

Pr0f1t
()

За абуз global, wallrus operator и бесконечных вложенных генераторов надо отдельно по рукам бить.

    o, sq, mfo, sum, num, cur = [], [], "", 0, 1, ""
    for v in (v for v in open(join(fld, fscv)).read().split(",\n") if v):
        fn, pars, Whom = v.split(",")
        o.append(
            [Whom, int(pars) > 0, fsz := getsize(join(fld, fn := fn + ".pdf")), fn]
        )
    teeprint(o := sorted(o, reverse=1))
ac130kz ★★
()
Ответ на: комментарий от FishHook

0. добавил в тудушки

по части пунктов здесь для начала

№11:

def f():None 
def f():pass

в CPython согласно dis.dis() тождественны - и вообще во всяком месте где pass можно ставить None - результирующий байткод тождественен(на текущих версиях)

сорян obsolete.py это файл с эпохи до контроля версий - фактически буфер кусков кода в дереве полноценного проекта не место -ага

№2: проект это комбайн утилит которые растут как самостоятельные (используя import от уже существующих) исполнимые файлы которые как только mature - вкорячиваются в main.py(тут splitingOfMandV.py) для предоставления своих сервисов -

в частности NormiW.py - это в начале попытка обнаружить косяки в записи адресов у двух организаций когда они один объект именуют по разному(с той или иной степенью отклонения от нормативного(факт в том что у одного объекта может быть не только несколько адресов за его жизнь но одновременно несколько не очень разных адресов разрешаются в один физический) - поэтому там всякая хтонь в main()

в процессе уменьшения невязок в адресных деревьях - вырос класс NormiAdr c ... __init__ который как есть приводит к общему эквиваленту «почтовый адрес»

проект в целом очень неряшлив - и его неряшливость к моему личному сожалению .....

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

Ну и зачем мне ваши соряны? Вы просили критику, вот вам критика. Или я критикуя ваш код должен держать в уме что это у вас «файл с эпохи до контроля версий», а вот это у вас была такая попытка, а потом вы передумали, а потом… Пожалуйста, уважайте людей, чьей помощи просите, и готовьте свой код к ревью.

и вообще во всяком месте где pass можно ставить None - результирующий байткод тождественен

Это все совершенно не важно. Есть гайдлайны - как писать код на языке python. Если вы их игнорируете - а вы их игнорируете - то… а чего вы ждете? Что вас хвалить будут за изобретательность? Вовсе нет, чем более ваш код похож на питоний код из палаты мер и весов, тем теплее ваши пулл-реквесты будут встречены сообществом или вашей коммандой. Не надо выдумывать сущности без необходимости.

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

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

благодарю за конструктив

qulinxao3 ★★
() автор топика

Ох, посмотрел исходники, сразу ощутил прилив ностальгии, как будто труды Терри Дэвиса читаю. Thanks for the memory. Критики нет, всё и так отлично.

anonymous
()

Вот тебе критика, навскидку:

  • за такие имена переменных надо канделябром лупить.
  • упаковать это всё в нормальный пакет PIP что мешает?

В сам код особо не вглядывался, ибо кровотечение из глаз и головная боль начались.

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

Я так глянул – имхо, кроме тебя, никто боле это читать и тем более править никогда не будет, а раз ты этот код понимаешь, то и изменять ничего не нужно. Разве что советую вспомнить, что такое док-стринги в функциях и в методах, а также где-нибудь в док-стринге модуля описать подробно, что тут вообще происходит и зачем. Иначе это моментально превратится во W/O код, как только контекст проекта выветрится из памяти.

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

0. в тудушки докстрингами обмазаться

в целом это верно

при этом как и всякий «пет-проект» одна из целей демонстрация наличия опыта в проектах «средней малости» объёма

отсюда и желание и намерение сделать код читаемей для «этих людишек» - док стринги ага

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

зы - проблема в том что я свой код и через двадцать тридцать лет быстро востанавливаю контекст - это реально оказалось недостатком в промышленном программирование где это способствует быстро становящеймся всем остальным непонятной субстанцией с мерзкими именами

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

Так тебе код улучшить или впечатление на людей произвести? В последнем случае надо все манипуляции произвести, которые тебе советовали выше: пакет сделать, файл зависимостей положить рядышком и прочую дремутень, чтобы сразу было видно – человек понимает, как делать вещи на тупоне квадратно-гнездовым методом согласно всем современным тенденциям.

Virtuos86 ★★★★★
()

Про PEP8 уже говорили. По хорошему, много всего менять…

Я бы начал с того, что переписал всё на раст Тьфу

Я бы начал с того, что перенёс модули-либы в подпапку, убрал у них мэйны. Потом добавил хоть каких то тестов. Далее, файлы, которые «Created by: PyQt5 UI code generator 5.15.10» должны генерироваться, а не храниться в репе.

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

0. в тудушки

не вполне очевидно(мне) какие тесты добавлять ибо из прозрачного(мне) как горный ручей кода очевидно(мне) где есть известные отклонения от нужного поведения а где один-в-один несуществующему ТЗ

assert(mode=warning) разбросать в каждом месте где очевиден инвариант шоб знать когда успешная практика отклоняется от очевидной теории для последующих иследований -

спс за акцент на тесты

с генерацией там ваще баго-фича до каких то пор достаточно было .ui pyinstaller'у c с какого то момента сбилденое перестало в себе развёрнутом находить пользовательский интерфейс для автоимпорта - пришлось прикручивать в билд процесс полуручное генерирование с обработчиком если не нашли .ui то импортируем из - до сих пор (sic :( ) unknown почему перестало хватать .ui файла для комфортной поездки

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

код это данные которые интерпретируются исполнителем(в частности cpu) в изменения состояния системы в которой исполнитель её часть

так что в коде всегда есть данные

вы про магические_значения?

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

о пользе автоформатеров (ruff хорош)

class Solution:
    def isEvenOddTree(self, r: Optional[TreeNode]) -> bool:
        return (
            l := {},
            f := lambda r, z: not r
            if not r
            or (q := r.val) % 2 != (e := z % 2)
            or (p := l.get(z, q - 2 * e + 1)) == q
            or (p > q) == e
            else l.__setitem__(z, q) or f(r.left, z := z + 1) and f(r.right, z),
        )[-1](r, 1)
qulinxao3 ★★
() автор топика
Ответ на: комментарий от ac130kz

Poetry ему подавай, дал Гвидо pip, пользуйся на здоровье. А то смузихлёбством попахивает, всю херь тащите когда есть стандартные инструменты.

Если и смотреть на замену то лучше уж UV оно пакетный манагер и для virtualenv.

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

Это один из многих способов изоляции проектов, не самый лучший на мой взгляд. Если вам нравится, пользуйтесь на здоровье, но для подобных громких утверждений нужны какие-то фактические данные, кроме вашего мнения. С какого суахили это стандандарт? Кто из авторов книг или видных разработчиков питона рекомендует поетри? Какие крупные фреймворки его используют? Насколько хорошо это интегрировано в ИДЕ? Сколько статей в интернете по сравнению, например, с конда?

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

Да, не лучший, поэтому я его и выпилил. Однако, очень упрощает одновременный менеджмент 20+ проектов. Почему назвал стандартным? Потому что вижу коллосальное количество проектов завязанных под него, крупные проекты и книги естественно используют стандарты уже языка (чистый PEP-621, PEP-508 и иже с ними) ради полной совместимости.

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

всё ж логичней:

class Solution:
    def isEvenOddTree(self, r: Optional[TreeNode]) -> bool:
        return (
            d := {},
            f := lambda r, z: not r
            or (q := r.val) % 2 == (e := z % 2)
            and (p := d.get(z, q - 2 * e + 1)) != q
            and (p > q) != e
            and not d.__setitem__(z, q)
            and f(r.left, z := z + 1)
            and f(r.right, z),
        )[-1](r, 1)

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

Вот, детишки, что бывает, когда говнокодеру охота повыпендриваться. Говнокодер сочиняет какие-то фантастические конструкции, вероятно в попытке удивить публику глубиной своего интеллекта.

and not d.__setitem__(z, q)

печалька в том, что __setitem__ вернет None, всегда. Вот что мешало сделать нормально, ввести переменные для каждого вычисления, использовать нормальный стандартный d[z] = q и не стрелять себе в ногу? Ничего не мешало, только шумы в голове и, видимо, в данном случае, ЧСВ и мамкохакерство

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

(извини за последствия для твоей гордости - но не удержусь спросить )

подробней что не так в этом:

and not d.__setitem__(z, q)

подвыражении не концевой ветви рекурсии в реализации f?

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

оба варианто говнореализации правильны по тестам :)

дык не кто не ставит под сомнение говнокодость подхода всё в одно мегавыражение

при этом тюленя в язык всунули - видимо для лучшей автогенерации в питон  — возможно скрытая цель так ускорить питон(через тоже mojo али ещё какой отказ от gil) что бы он отконкурировал js в части быть целью трансляции

и таки :

ps. для мало внимательных - пока питон не может := в составные объекты как то индексы поля и прочие составные lvalue :)

люблю простой python люблю простой с люблю простой asm не люблю капитана крюка и его фобии тикающих крокодилов

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

я не кормлю троллей. Если ты не понимаешь, почему я ругаю твой код, тебе либо лечиться надо или идти вон из профессии. Это ты создал топик «покритикуйте код», а не я. Мне этого на работе хватает. Если критика тебе была нужна только чтобы раздуть тред, в котором ты начал кривляться, провоцировать тупостью и строить из себя невинно-наивного дурачка с голубыми глазками, который прям правда-правда не понимает, почему какашка которую он высрал никому не нравится - значит ты тролль и говорить с тобой не о чем.

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

FishHook
()