LINUX.ORG.RU

Можно ли в питоне конкатенировать имена переменных или методов?

 ,


0

3

Приветствую.

В PHP можно создавать динамические имена переменных в рантайме.

for ($i = 1; $i <= 5; $i++) {
test$i = 1;
}

В итоге мы получим test1, test2, test3, test4, test5 которые будут равны 1.

Возможны ли такие фокусы в python ?

for i in range(5):
  TESTi = 1

Или что еще лучше с именами методов

for i in range(5):
  self.NAMEi.method()

Если с методами, то можно хоть чучелом массивом

for i in range(5):
  self.NAME[i].method()

Юзкейс.

Есть цикл. В цикле перечисляются объекты с методами. В моем случае, скрывать не буду, это кнопки GTK с обработчиками clicked, ссылающимися на функцию. Функции можно передать произвольные данные. Но потом нужно поменять свойство объекта, а чудаки из gtk4 не удосужились снабдить виджет идентификатором по которому потом к этому виджету можно будет обратиться. То что gtk4 убог я в принципе осознавал, но вопрос касается только способностей питона именовать объекты на лету.

Спасибо.

★★★★★

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

Окей, ща отвечу, на этот очередной набор предрассудков, взявшихся из известной VOIP системы «одна бабка сказала»

Для человека с молотком все выглядит как гвоздь (с) Марк Твен

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

Перефразируя, для человека нормально знающего только Лисп все вокруг выглядит как список.

Это типа в лиспе то только одни списки и есть? Охохонюшки. Ну, году в 1958м может и были. Но тут видно что ты отстал от реальности немножко так.

Это очень узкая картина мира, такая же была у ярых Perlовиков, для которых все вокруг было текст и которые в итоге - вымерли.

Не по этой причине перловики «вымерли», естественно. Да и куда там вымерли - живут вполне себе, вон один букинг че стоит.

Тоже самое с Lisp. Языки либо живут и адаптируются к новым требованиям индустрии либо выдавливаются из нее.

Нет никаких особенных требований индустрии к которым лисп якобы не адаптирован. Более того, в индустрию часто проникают языки которые вообще противоречат требованиям индустрии, типа JavaScript, который в этой индустрии как корове пятая нога, от которого плюются все кто можно, и так далее, это как вирус натурально, как-то типа ВИЧ, или COVID, от которого всем только хуже но спасения не видно.

Главная проблема Lisp в том что он тормоз. Попробуйте осознать это, Lisp это тормоз. Не по скорости работы, нет, по скорости разработки.

Как раз наоборот, лисп предполагает высокую скорость разработки по сравнению с тем что сейчас в мейнстриме. И это вообще говоря, одна из основных его фишек, про которые писали и в 80х, и в 90х(viaweb и все остальное), и пишут и сейчас(даже допустим кложуристы пусть clojure и не совсем лисп).

Во многих сферах уже необходимо сделать БЫСТРО (eCommerce, продажи не ждут - PHP, JS) или проверить БЫСТРО несколько вариантов взяв готовые пакеты по вычислениям

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

(ML и стык околонауки с коммерцией - Python), сделать БЫСТРО минимально жизнеспособный продукт (MVP) внедрить его и дорабатывать исходя из условий меняющейся среды (от web серверов до алгоритмической торговли - C++, C#, Java, .Net) и тд и тп.

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

Даже язык 1С лучше Lisp в тех задачах для которых он предназначен - автоматизация бух учета, учета вообще, управления и отчетности в ЛЮБЫХ сферах бизнеса. Просто потому что он предоставляет готовый набор объектов более высокого уровня абстракции чем список, с готовой бизнес-логикой под требуемые задачи. И в данном случае абсолютно не важно что 1С написан на С++, а могли упороться и написать на Lisp. Потому что при разработке самой платформы 1С точно также учитывались и сроки и возможности языка и поддержка когда и его изменения (переход с v7 на v8 на 1С сравним с переходом с v2 на v3 в Python).

Как-то мы быстренько скакнули от языков общего назначения до каких-то кривых DSL в специфических системах. Я лично не то чтобы когда-то предлагал заменять 1C на лисп, или там SQL на лисп, несмотря на то что DSL на его основе были бы куда более вменяемые, моя основная претензия именно в распространенности бесполезных и даже вредных языков общего назначения, типа Python или даже C#, которые вполне можно себе заменить на лисп, и которые используются только и исключительно по причине захайпованности, и по причине того что их маркетингом занимаются крупные корпорации типа гугла и MS, несмотря на то, что объективных причин их использования нет вообще никаких от слова совсем, что очевидно для любого человека хоть сколько-нибудь знакомого с CL и его экосистемой, к которым ты, судя по всему не относишься.

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

Никаким языкам общего назначения он, естественно не проигрывает, кроме одного фактора - это маркетинга и хайпа. Всё.

А конструировать объекты более высокой абстракции на Lisp и создавать из них экосистему пытаясь догнать современные языки это заведомо проигрышная позиция для бизнеса т.к. время-деньги.

Ты видимо о бизнесе знаешь и слышал только из курсов бизнес-молодости, точно так же как о лиспе ты знаешь только из срачей на ЛОРе, т.к. любому человеку знакомому как с современным положением дел в IT индустрии вообще говоря понятно что из себя представляет как сам бизнес, так в своей массе, так и то что разнообразное дерьмо которое в продакшне используется, приносит только костыли и головную боль. Например взять Бидон - одна из моих работ на нем заключалась в автоматизации американского рынка ипотек. Так вот, мало того что в питоне нет НИХЕРА для нормальной интеграции с Serious Business системами использующими SOAP и прочий сракотан, так и вообще, буквально каждую хероту приходилось писать самим, ручками, и плеваться, как от опенсорсных поделий, так и от забагованности, тупости и тормознутости самого интерпретатора. И как это обычно бывает, Python там был выбран не исходя из каких-то «бизнес-требований» и прочих твоих выдумок, а просто исходя из желания левой пятки начальства.

Это доходит до абсурда когда сделать коряво на JS выкатить в прод сегодня в разы ВЫГОДНЕЕ для бизнеса чем выкатить завтра, но нормальное.

Естественно, что на JS такого не бывает вообще никогда от слова совсем кроме как в твоих влажных мечтах. Обычно бывает - сорванные сроки, поехавшая крыша у разрабов, найм 100500 индусов на допиливание, которыми невозможно руководить вообще, и так далее.

Даже с учетом того что завтра придется переписывать все с нуля. Такова реальность современной разработки за денюжку и ради денежки.

Да, уж переписывание с нуля и изобретение велосипедов на ровном месте это постоянная херня и вообще бич этой индустрии. Но тут возникает вопрос - если мы и так все делаем с нуля, на какой хер нам жрать говно в виде JS, Golang, Жабы и прочего? Почему бы сразу не взять нормальный инструмент?

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

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

Опять какие-то сказки прочитанные на форумах. Даже лень отвечать.

Теперь о недостатках Lisp (реализаций). Возьмем для примера Ваш pet проект bike который реализует интероп с .Net через CLR. Он не работает ни в SBCL ни в CCL. Просто не работает под Linux. И никогда не заработает полноценно.

Естественно, он работает, и даже проходит тесты на CircleCI, и если бы ты в глаза не долбился, ты бы там это прочитал.

Вы это знаете, я это знаю, но Вы почему-то забываете упомянуть об этом в своих сообщениях когда указываете его.

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

Можно тупо подавить выработку исключений чисел с плавающей точкой на стороне Lisp (SBCL) и оно заведется, но как тогда можно быть уверенным что 2.0 + 2.0 = 4.0 ? Или что не произошло деления теплого на мягкое или еще что? Исключения то отключены.

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

Можно сказать что это .Net 6 и 7 виноваты, но другие-то языки отлично работают с .Net CLR. Т.е. Lisp не справился с поставленной задачей.

Ты виноват в том что читать не умеешь. Потому что если отрубить эти исключения - то мы получим абсолютно то же поведение что и в том же C#, которого вообще не волнует возникновение невалидных флоатов, и в случае которого NaN просто передается и дальше и засирает все вокруг. Проблема в CL состоит в том, еще раз, что в стандарте CL написано - что такие операции должны вызывать исключения; но опять же, все современные реализации это позволяют обходить, и просто вырубать отлов этих аппаратных исключений.

Любой C++/C# программист может решить эту задачу, а Вы на Lisp - нет. Можно прятать в голову в песок и обзывать всех, а можно принимать объективную реальность на сухую. Выбор за Вами.

Нет, естественно, средний C#/C++ программист особенно из какого-нибудь энтерпрайза или аутсорса, такую задачу в принципе не мог бы решить, т.к. в массе они крайне низко квалифицированы, и когда перед ними стоит задача, выходящая за рамки быдлокодинга на популярных фреймворках, у них возникает просто ступор и кататония. И тут даже не надо опускаться до интеграции с ОС, сигналами и прочим низкоуровневым говном. Я помню, мне вон на одном собесе в прошлом году рассказывали что мелкий баг в опенсорсном драйвере к посгресу для дотнета положил блином огромную систему в крупной компании, и чтобы в этом разобраться, разрабам потребовались месяцы, и они чуть там крышей не поехали.

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

Нет.

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

s-warus ★★★
()
Ответ на: комментарий от Nervous

Практически весь eCommerce перешел на JS во фронтенде и PHP(JS) на бекенде. У меня один из проектов работает лет 8, за последние 2 года 0 ошибок по бекенду. Не самая маленькая сеть европейского бренда с со своими цехами/складами в разных странах с онлайн продажей и пиками покупок на распродажах до 30 в секунду. По нагрузочному тестированию вся инфраструктура гарантированно выдерживает до 100 продаж (не посещений) в секунду, это и процессинг и куча внешних api по расчетам доставок/платежные системы и тд. Дальше простое масштабирование в ширину и глубину по необходимости.

Это не Higload, но в данной проекте PHP полностью удовлетворяет всем условиям включая надежность. А чего бы ему не удовлетворять если среднее время обработки запроса не больше 15мс на бекенде и сборщиком мусора является смерть после выполнения запроса?

Примеры на JS - фронтенды в вебе которые асинхронно плюются в бекенд по API.

Пример на Python - нужно подготовить данные в нужном формате, найти в них корреляцию признаков, затем автоматически создать ансамбль который будет обучать много разных нейронных сетей с тем чтобы выбрать оптимальные гиперпараметры для поставленной задачи, после чего выбрать победителя и его обучить подготовленными данными. Такая система будет работать от пары часов до пары суток/недель. Один раз. После чего будет выкинута за ненадобностью, а полученный результат (обученная сеть) будет использован в совершенно другом месте с другим языком. Надежности Python для данной задачи - более чем достаточно. А количество библиотек под эту задачу на Python позволяет ее еще и очень быстро сделать.

Это из личного опыта. Серебряной пули нет.

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

в 2004 году короткий скрипт на php c двумя запросами к базе, выдерживал нагрузку порядка 1000 запросов одновременно сервер celeronD 200Mb ОЗУ (сколько именно запросов не знаю сотовая связь в Москве от такой нагрузки упала, прогу на терминалах тестировал)

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

Пожалуйста. Оффтопик: знаю одного строителя-отделочника, который в свое время по моим статейкам в старом бложике в том числе неплохо выучил питон. Потом немного джаваскрипт и перешел к джаве (самое страшное, что он на ней пишет под Андроид и НА Андроиде 🔥). Человек, по-настоящему загоревшийся когда-то и увлеченный прикладным программированием.

Так что мне не впервой давать уроки змеюки. Хотя тут совсем скромный какой-то, даже неловко благодарность принимать.

Лавсан критикует питон, но еще Аристотель писал, что нет в природе вещи плохой самой по себе, это люди всё могут извратить и испортить. Правда некоторые вещи «портятся» чуть проще других 😊.

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

(ML и стык околонауки с коммерцией - Python), сделать БЫСТРО минимально жизнеспособный продукт (MVP) внедрить его и дорабатывать исходя из условий меняющейся среды (от web серверов до алгоритмической торговли - C++, C#, Java, .Net) и тд и тп.

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

Покажите мне Tensorflow, Keras, Torch, Pandas, Numpy и Seaborn на Лиспе. Их нет? Так тогда на идеально подходящей вершине Compute Science западной цивилизации придется писать стыдливо создавать конструкции которые ложатся в абстрактное синтаксическое дерево Python чтобы иметь возможность сделать хоть что-то в обозримые сроки. А зачем тогда Lisp в решении? Вы как молодой DevOps - личинка Админа, который пихает Docker везде куда дотянется.

Ты видимо о бизнесе знаешь и слышал только из курсов бизнес-молодости, точно так же как о лиспе ты знаешь только из срачей на ЛОРе

Да, я Обезъян, обезью, и буду обезъять. 21 год опыта не показатель, тут я согласен.

Теперь о недостатках Lisp (реализаций). Возьмем для примера Ваш pet проект bike который реализует интероп с .Net через CLR. Он не работает ни в SBCL ни в CCL. Просто не работает под Linux. И никогда не заработает полноценно.

Естественно, он работает, и даже проходит тесты на CircleCI, и если бы ты в глаза не долбился, ты бы там это прочитал.

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

Вижу, что не в коня корм. Да и после вашего вранья любой звук от Вас не имеет никакого веса.

На этом предлагаю закончить наше собеседование, мы вам перезвоним.

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

Покажите мне Tensorflow, Keras, Torch, Pandas, Numpy и Seaborn на Лиспе. Их нет?

Аналоги некоторых - есть. Для других можно биндинги сделать не приходя в сознание.

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

Каким образом она работает в контейнере в CircleCI?

https://github.com/Lovesan/bike/blob/master/tests.lisp

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

Вы опять Выходите на связь? Из-за Вас мне пришлось скачать Ваше поделие еще раз, чтобы сделать скриншот.

Вот я пытаюсь запустить Ваше поделие на своем домашнем Linux: https://ibb.co/h1qgvcz

Вот описание что Ваше поделие не работает в Linux, написано Вами же в Вашем репозитарии: https://ibb.co/k35bV5k

Хаки с disable NaN-related exceptions for SBCL чтобы это поделие смогло скомпилировать dll-ку это сильно. И это Вы предлагаете тащить а продакшн?

Лавсан, дорогой, очнитесь - Вы серите. Хватит умножать на ноль свою репутацию.

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

Вы предлагаете мне в третий раз скачать Ваше поделие чтобы попытаться подсунуть свой грязный хак прописанный прямо в tests.lisp вот тут и вот тут? Благодарю, но я пожалуй воздержусь.

Фу, как Вы можете считаться адептом божественного Лиспа предлагая такое? Вы понимаете что это говнокод?

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

но позвольте

не ужели linux настолько не лисп френдли - что не было и нет возможности в основной ветке дистриба прописать что бы не приходилось палиативами авторскими пробавлятся для?

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

Ах, вот как теперь, стрелочка то оказывается поворачивается. А как же высокие стандарты расовой чистоты Лиспа? Этот workaround hack делает из Lisp что-то похуже JS в плане безопасности. Я не рискну запускать такое в проде, уж лучше Go.

Право, так возить лицом одного Лиспера может только другой Лиспер, пусть и бывший )

У меня начинают закрадываться сомнения что Вы вообще знаете Lisp. Давайте проверим. Вот есть в Lisp набор функций: caar, cadr, cdar, cddr, caaar, caadr, cadar, caddr, cdaar, cdadr, cddar, cdddr, caaaar, caaadr, caadar, caaddr, cadaar, cadadr, caddar, cadddr, cdaaar, cdaadr, cdadar, cdaddr, cddaar, cddadr, cdddar, cddddr, 28 штук. Это обертки над car и cdr, тот самый синтаксический сахар который Вы отрицали в соседней теме. Буквально:

(caar x)    => (car (car x))
(cadr x)    => (car (cdr x))
(cdar x)    => (cdr (car x))
(cddr x)    => (cdr (cdr x))
(caaar x)   => (car (car (car x)))
(caadr x)   => (car (car (cdr x)))
(cadar x)   => (car (cdr (car x)))
(caddr x)   => (car (cdr (cdr x)))
(cdaar x)   => (cdr (car (car x)))
(cdadr x)   => (cdr (car (cdr x)))
(cddar x)   => (cdr (cdr (car x)))
(cdddr x)   => (cdr (cdr (cdr x)))
(caaaar x)  => (car (car (car (car x))))
(caaadr x)  => (car (car (car (cdr x))))
(caadar x)  => (car (car (cdr (car x))))
(caaddr x)  => (car (car (cdr (cdr x))))
(cadaar x)  => (car (cdr (car (car x))))
(cadadr x)  => (car (cdr (car (cdr x))))
(caddar x)  => (car (cdr (cdr (car x))))
(cadddr x)  => (car (cdr (cdr (cdr x))))
(cdaaar x)  => (cdr (car (car (car x))))
(cdaadr x)  => (cdr (car (car (cdr x))))
(cdadar x)  => (cdr (car (cdr (car x))))
(cdaddr x)  => (cdr (car (cdr (cdr x))))
(cddaar x)  => (cdr (cdr (car (car x))))
(cddadr x)  => (cdr (cdr (car (cdr x))))
(cdddar x)  => (cdr (cdr (cdr (car x))))
(cddddr x)  => (cdr (cdr (cdr (cdr x))))

Внимание, вопрос: а почему их 28?

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

Этот workaround hack делает из Lisp что-то похуже JS в плане безопасности.

При чем тут безопасность вообще? Дурень, у тебя в других языках - во всяких Java и C# вообще аппаратные невалидные операции с float не отлавливаются. В лиспе до дефотлу - отлавливаются, ну так вот у меня написано как это отключить, чтобы в этом плане сделать лисповую обработку float на уровне C#

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

не ужели linux настолько не лисп френдли

Проблема Linux гораздо глубже чем кажется. Она не с лиспом связана. На линуксе есть концепция «сигналов», которая вообще не сочетается с современным положением вещей в мире, в т.ч. с лиспами. Сигналы это говно из 60х, криво сделанное и нахер не нужное. Вот винда хороша хотя бы тем, что там этого древнего кривого говна нет в принципе.

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

Ты спросил, как это делается в лиспе - я ответил. Или ты уже не помнишь о чем писал, у тебя с головой проблемы?

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

Мне не надо переделывать пых в лисп.

Мне надо было создать объекты GTK с индексом, чтобы потом из другой функции обратиться к конкретному объекту по индексу переданному в функции.

Уже даже примеры привел.

Но нет же ж, ты все равно строчишь муть стиля «ололо, лисп тоже умеет в циклы».

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

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

Потому что потом хрен отдебажишь. Потому что точка вызова не определена вне рантайма. Потому что это нахрен ломает любые инструменты статического анализа ввиду предыдущего пункта. Дальше продолжать?

Тебе массив callable вернет массив их результатов, это фиксированная и очевидная логика. Что вернет массив getattr без чтения кода одному богу известно

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

Потому что потом хрен отдебажишь. Потому что точка вызова не определена вне рантайма. Потому что это нахрен ломает любые инструменты статического анализа ввиду предыдущего пункта. Дальше продолжать?

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

кнопка[1].gtk.button('преветек', onclick(process, 1))
кнопка[2].gtk.button('кагдила', onclick(process, 2))
кнопка[3].gtk.button('штоделаеш', onclick(process, 3))
... еще десяток баттонов, а может и двадцатник, хз

def process(button, number):
 for i in кнопка:
  кнопка[i].gtk.button.set_inactive() # Сначала сделали со всеми кнопками что-то дефолтное
 кнопка[number].gtk.button.set_active() # А с нажатой кнопкой сделали что-то недефолтное
...

Код не точный, но суть тривиальных задач я передал. Даже HTML в этом плане сделан грамотно, каждому объекту можно присвоить какой угодно признак, а потом к этому признаку обратиться. Можно нарисовать 100 div'ов с id от 1 до 100 и style например «test», а потом поменять свойства этих div'ов по любому из этих признаков, хоть все «test» закрасить серым, а id#52 зеленым.

Что тут можно и нужно дебажить в примитивном коде if\then ?

Более тебе скажу, добавляя параллельное свойство, и вставляя потом исключения по этим свойствам - вносится больше путаницы, чем просто добавляя индекс.

Массивы же мы как-то дебажим.

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

Что тут можно и нужно дебажить в примитивном коде if\then ?

Промажешь в цифре - узнаешь

Вообще тут сразу пачка проблем - инты вместо енума, однострочные вещи которые тупо читабельнее вставить лямбдами и partial, один метод который «делает круто». Такой код не масштабируется от слова совсем. Про отсутствие хинтов я вообще молчу.

Вообще в пет-прожекте на 500 строк можно хоть рефлексией самоублажаться, хоть вообще все одной портянкой в init напихать, там все норм. Но best practices как бы пишется для чуть более крупных проектов с чуть более чем одним разрабом.

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

Знаешь, я сейчас разбираюсь с best practices от разработчиков сраного ГТК, которых явно больше одного, и там мрак полнейший.

По сути весь этот дроч, с которым мне к счастью помогли, был нужен лишь для одной задачи: задать выделенный стиль одной кнопке, и убрать выделенный стиль со всех остальных, и лишь только по одной причине: best practicные разработчики этой гадости не удосужились добавить своему объекту возможность идентификации. Enum, int, string - пофигу, хоть какие-нибудь идентификаторы чтобы к ним можно было потом обратиться.

К парадигме питона у меня в данном случае вопросов нет.

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

@lovesan, дорогой, 2.5 часа прошло, вы что, таки лисповый джун? Отвечайте на мой ответ :)

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

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

почему их 28

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

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

он бы еще спросил вообще что такое CAR и CDR, и откуда такие названия

Ну типа, Contents of the Address part of the Register number и Contents of the Decrement part of the Register number. Но тут сразу возникнет вопрос что такое Register Number, почему там два значения и воще?

Историю учить надо.

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

Ответ на вопрос где? :) Вопрос: почему их 28?, а не как расшифровывается car и cdr.

Это вопрос для Лисп-миддла чуть выше среднего. То что Вы не синьор и так уже понятно, у Вас время до завтра до полудня доказать что Вы хоть что-то знаете на уровне хотя бы миддла, а не просто с умным видом толкаете дичь на форуме.

Отсутствие внятного ответа будет расценено как признание Вашей собственной ограниченности в знании Lisp и профнепригодность.

Удачи.

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

Вопрос для лисп-мидла это вопрос например, как работает EVAL-WHEN, а та не херота которую ты придумал. 28 методов ему не нравится. Ну напиши еще 38, если не лень.

Из-за обратной совместимости там эти методы вообще.

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

Ну напиши еще 38, если не лень.

Можно было и 38 сделать, но не сделали.

Из-за обратной совместимости там эти методы вообще.

Господи, Вы реально не знаете. Ищите, не позорьтесь, есть поисковики, есть chatgpt, есть книги в конце концов! До полудня еще много времени, дерзайте же.

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

Это просто вопрос на опыт, на то насколько опытен человек в использовании языка, насколько он понимает область языка который он использует и как много он с ним работал в реальности.

Ну не синтаксис же его спрашивать, а что там остается? CLOS? MOP? S-выражения? Рекурсии? Функционалы? Макросы? Это все не так сложно и Синьора от Миддла этим не отделить. К тому же я верю что он это знает. Вот только знание ≠ опыт.

Чтобы писать на языке обработке списков эффективно нужно думать как список - быть списком. В там случае, даже если не знать ответ можно его найти немного порассуждать. То как человек рассуждает над задачей которую не знает также показывает его уровень.

Если очень долго смотреть в пропасть, то эта пропасть зарегистрируется на форуме и придет пообщаться. «Вы разбудили деда» (с) :)

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

Это доходит до абсурда когда сделать коряво на JS выкатить в прод сегодня в разы ВЫГОДНЕЕ для бизнеса чем выкатить завтра, но нормальное.

Та завтра можно и не выкатить, завтра уже все это будет не нужно, а нужно будет другое, там и напишут нормально. Много чего надо просто попробовать и все.

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

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

nyet, берётся вротпресс и херачится.

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

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

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

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

Это обертки над car и cdr, тот самый синтаксический сахар который Вы отрицали в соседней теме.

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

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

Мы будили всё-таки не Евгения от Лиспа, но видимо, как-то не так будили 😄. А то полное ощущение, что тот же самый человек, еще немного и «илитариями» начнет разбрасываться.

Хотя бы радует, что лисподжуны умеют интеропы между CL и .Net писать, не хухры-мухры. Я бы им незнание какого-то забавного факта за это простил (ибо кому он нафейхоа нужен? 🤣 ).

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

Не зная Лиспа, предположу, что

(format nil "TEST~a" i)

это форматирование строки, вставляем переменную цикла в строку

intern

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

symbol-value

Раз такой функции подают строку вида «TEST1», то видимо она создает из нее символ.

setf

А здесь тривиально помещаем в созданный символ значение переменной цикла. Вопрос, что за объект будет скрываться за созданным символом, если этого не сделать? nil, наверное, по умолчанию.

Virtuos86 ★★★★★
()
Последнее исправление: Virtuos86 (всего исправлений: 1)
def isСhoosed(self):return self is lastchoosed

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

трудность в определении id() кликнутого элемента?

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

немножко разименовав:

def onclik(self,choosed_btn):
    for e in btns:
        e.set_label([
            "Nicht",
            "Ja",
          ][int(e is choosed_btn])

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

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

Написать желаемое ТС можно разными способами: чем тривиальнее задача, тем больше способов ее решить, как в его случае. Что-то очень сложное наоборот решить можно зачастую лишь единичным образом.
Но поскольку код будет читать и развивать дальше именно ТС, а не мы, логичнее подправить его собственный код, вместо предложения наших вариантов, пусть и даже на голову лучших, допустим — свой-то код он и после чужой доработки поймет.

Можно ли в питоне конкатенировать имена переменных или методов? (комментарий) — дельные мысли, однако в случае ТС либо он пишет кот, либо учится писать на Питоне, — выбирайте любые один 🙃.

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