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
()