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)

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

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

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

Но, конечно, лисперов проще высмеять

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

я говорю просто простые истины не основанные на какой-то там мифологии, а основанные на фактах

Тем не менее, Delphi «принят» в этой стране «на ура», а ЛИСП до сих пор используется лишь «элитой». Может быть, для занятия функциональным программированием нужно стоять на пару ступенечек выше в пирамиде потребления?

И проблема совсем не в индивидуумах?

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

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

Синтаксический сахар - это синтаксические возможности, применение которых не влияет на поведение программы, но делает использование языка более удобным для человека. Именно это оно и есть. В ответе я раскрою более подробно. Это то самое «в Lisp нет сахара» утверждение от недолисперов.

Это вопрос про Lisp или про комбинаторику 6 класса, замаскированную на вопрос про Lisp?

Пятого класса, если Вы понимаете о чем я.

@lovesan, дорогой, Ваше время вышло. Просьба написать ответ, если не знаете то можете просто написать цепочку своих рассуждений это тоже считается.

Ну либо можете написать грубость и я засчитаю Вам слив после которого Вы не будете иметь морального права бегать по темам и открывать свой рот на тему Лиспа, т.к. вы даже не Миддл.

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

Штош, я дал Вам шанс, Вы им не воспользовались.

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

Ответ: потому что именно столько команд (не считая самих car и cdr) нужно для удобства написания кар-кар лапши в одну команду при работе со списками из пяти элементов. Это синтаксический сахар.

@jumminy1968 - Ваша догадка абсолютно верна. Достаточно было внимательно посмотреть на столбик перечисленных команд чтобы увидеть это.

@lovesan - молодой человек, это - база, это знать надо.

Почему именно 5-ти элементный список?

Так исторически сложилось - именно столько элементов нужно было для создания машинного слова (2 поля + 3 регистра)

Дальше уже пойдет урок истории.

Lisp появился для работы на IBM 704. У этого монстра не было адресного и декрементного регистра, вместо них были адресная часть регистра и три индексных регистра для модификации адресной части.

Когда все что у тебя есть это длина «слова» в 36 бит приходится изворачиваться, используя набор инструкций с коротким 3х битным префиксом кода операции и двумя 15 битными полями, разделенные 3х битным тегом (3 + 15 + 3 + 15 = 36 бит).

Первое 15ти битное поле представляло собой адрес операнда, а второе содержало декремент или счетчик. Тег указывал один из трех индексных регистров. Таким образом в одном «слове» хранили 2 указателя необходимые для реализации списков.

Итого 5 элементов для доступа (3 регистра + 2 поля)

Тк индексирование на IBM 704 было вычитающим процессом, то значение, загружаемое в индексный регистр, называлось «декрементом». Отсюда и название команды - cdr. Вместе с остальными командами доступа к разным частям регистра получили великолепную четверку:

car (содержимое адресной части номера реестра)
cdr (содержимое декрементной части номера регистра)
cpr (содержимое префиксной части номера регистра)
ctr (содержимое теговой части номера регистра)

Машинные cлова составляли используя команду cons, которая принимала четыре аргумента (a, d, p, t) и создавал слово-список обрабатываемый копьютером. Да да, раньше cons принимал 4 аргумента.

Для решения задач в те времена постоянно приходилось собирать/разбирать машинные слова и работать с двумя полями вручную, а писать постоянно конструкции вида cdr (cdr (cdr x)) было как-то не очень удобно. Так появился первый синтаксический сахар, к cdr добавили сахарку: cddr, cdddr, cddddr (3 шт) чтобы получать данные из списка длиной до 5 элементов. Оценив удобство такой же сахарок сделали и для сar (caar, caaar, caaaar - 3шт). Работа со списками поменялась с

(cdr (cdr (cdr (cdr (list 1 2 3 4 5)))))
(5)

на

(cddddr (list 1 2 3 4 5))
(5)

После чего использование car и cdr также обсахарили попарно для списка из 5 элеменетов и получилось всего 28 вариантов не считая изначальных car и cdr.

А что же cpr и ctr? При дальнейшей разработке Lisp команды cpr и ctr отмерли и остались только car и cdr, а команду cons из 4х аргументной переделали в 2х аргументную т.к. стало на 2 куска регистра меньше. А осадочек сахар для удобной работы со списками из 5и элементов - остался. Хотя никто уже не конструирует машинные слова вручную на машинах с электронными лампами. Идут года, на дворе давно уже уже x86-64, а Lisp до сих пор в базе своей использует сахар изначально заточенный под работу с 15ти-битными машинными словами и 3мя индексными регистра IBM 704 1954 года выпуска. Это печально.

@lovesan, с этого момента Вы не можете кукарекать свое «единственно правильное» мнение о Lisp т.к. Вы даже не миддл - помните об этом. В lisp Вас обоссала какая-то php-макака.

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

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

Не совсем. Трудность в предсказуемом наименовании ряда элементов группы. В данном случае кнопок. Учитывая их случайное количество.

Вот смотри. В директории /usr/share/themes - есть темы. Мне их нужно вывести на экран, чтобы выбрать одну из них (желательно подсветив текущую).

Я читаю директорию пошагово, и вывожу каждую тему кнопкой.

У кнопки есть свой стиль. Предположим все темы - серая кнопка, а активная или выбранная тема - синяя кнопка. Банальный color=red, неважно на каком языке.

Естественный нормальный понятный алгоритм визуализации (если он не предоставлен самим объектом или функцией) - отловить клик по кнопке, передать моей функции. А в самой функции перекрасить все кнопки в серый цвет, и затем выбранную кнопку в синий.

Поэтому я бы это назвал трудностью с дальнейшим обращением к созданным объектам.

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

В lisp Вас обоссала какая-то php-макака.

А где туть lisp собственно? История lisp изложена блистательно, да, очень интересно 😊. Кстати, беру свои слова выше про «сахар» обратно — убедили! Но как незнание таких замечательных фактов мешает Лавсану писать на lisp, не совсем ясно.

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

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

в вышепривед>ном тексте чатЛГПТ не был….

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

intern тут как раз фундаментальная вещь, это момент перехода от программирования к метапрограммированию

http://l1sp.org/cl/intern

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

Это как раз intern делает. symbol-value просто берет значение из ячейки значения символа, или же, в случае когда находится в позиции setf, т.е. когда вызывается функция (setf symbol-value), то она наоборот, присваивает символу значение.

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

Но народ не верит. Не нужен он им.

Потому что Blub Paradox http://www.paulgraham.com/avg.html

Тем не менее, Delphi «принят» в этой стране «на ура»,

В этой стране много странных вещей принятно на ура, например такая странная и бесполезная вещь как операционная система FreeBSD.

И проблема совсем не в индивидуумах?

Проблема именно в людях.

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

Ответ: потому что именно столько команд (не считая самих car и cdr) нужно для удобства написания кар-кар лапши в одну команду при работе со списками из пяти элементов. Это синтаксический сахар.

Это функции обычные, дурень. Даже не макросы. То есть это к синтаксису не относится вообще от слова совсем.

[скопированный с википедии текст]

И? В CL многое действительно существует из-за обратной совместимости, это же не макакоязыки типа C++ или JS.

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

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

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

Типа, когда говорят «зачем вы жрете говно? Хватит жрать говно!» это секта?

Да. Это мало того что секта, это секта дурачков.

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

Другой - это не той, которую ест предлагающий, а ту которая будет удобоварима теми, кого он критикует.

А теперь смотри сюда.

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

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

Но мне нужно делать, а не страдать фигней.

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

Так что выбор очевиден. А то шо твой лисп умеет какие-то лямбды-херлямбды которые мне никогда не понадобятся (потому что я очертил круг СВОИХ задач) - это не дает ему ни одного преимущества.

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

А где туть lisp собственно?

Lisp тут в синтаксическом сахаре и умении размышлять над списочными структурами. В данном случае была задача продемонстрировать пациенту что не стоит делать высокомерные заявления о Лиспе (нет сахара и тд) и оскорблять всех дебилами будучи в подмножестве этих самых «дебилов».

Я лишь спустил его с Lisp Олимпа на землю, к нам - простым смертным.

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

Лично я придерживаюсь мнения, что на ЛОР места всем хватит. Главное, стараться уважать друг друга и чужую позицию. Даже если это дебилы или илитарии. Даже если проводить время в ожесточенных спорах. Иначе не останется ничего, кроме как выпилиться отсюда, контингент тут крайне постоянный и редко обновляется.

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

Я с Вами полностью согласен, тут вопрос только в качестве аргументов.

«Всё вокруг идиоты» в исполнении Лавсана в каждой теме куда он заходит это какой-то жидкий аргумент.

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

Порог вхождения в питон у меня нулевой. Как и в лисп. Я открыл первые страницы питона, открыл первые страницы лиспа, открыл примеры питона, открыл примеры лиспа, открыл гтк-примеры на питоне, открыл гтк-примеры на лиспе. Лисп мне не понятен.

Это полная херня конечно, разве что если есть вариант что у тебя чем-то мозги повреждены(какой-нибудь Java или C++). Студенты с нулевым знанием вообще чего-либо в программировании, врубаются в ту же Scheme вообще не приходя в сознание и с бодуна.

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

Для меня, естественно, это не религия, а инструмент решения задач. А вот для упоротых которые продолжают кушать какашки, когда есть нормальная еда, или даже фрукты какие - это похоже религия, по типу хлыстовства или неолуддизма. Отморозить себе уши и отрезать хрен готовы, буквально, лишь бы на лиспе не писать.

Но мне нужно делать, а не страдать фигней.

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

Так что выбор очевиден. А то шо твой лисп умеет какие-то лямбды-херлямбды которые мне никогда не понадобятся (потому что я очертил круг СВОИХ задач) - это не дает ему ни одного преимущества.

Ну как я говорю - неолуддизм, прямо религиозное рвение. Перекрестись еще давай, или что у тебя там в религии принято.

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

Это функции обычные, дурень. Даже не макросы. То есть это к синтаксису не относится вообще от слова совсем.

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

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

Вам не надоело прилюдно обсираться раз за разом? У Вас ярко выражен синдром Даннинга-Крюгера, задумайтесь над этим.

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

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

«Алиас» к функции — это не элемент синтаксиса языка программирования.

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

«Алиас» к функции — это не элемент синтаксиса языка программирования.

Сильное заявление. Т.е. например, Вы тернарную запись if которая есть во многих языках тоже за синтаксис не признаете?

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

Синтаксис записи функции — правила, которым должна удовлетворять запись определения или вызова функции; форма записи функции.

Вы меня пугаете, это еще лор или уже хабр?

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

Это может быть любой элемент синтаксиса

Именно синтаксиса. Синтаксис функции это сахар, но сами функции это не сахар, дядя. Синтаксис задаёт структуру кода, функции задают содержание кода. Синтаксический сахар – это структурные улучшения/упрощения, а не улучшения содержания.

У Вас ярко выражен синдром Даннинга-Крюгера

Нет у вас. Ты не можешь мух от котлет отделить, у тебя каша в голове.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 2)
Ответ на: комментарий от lovesan

И проблема совсем не в индивидуумах?

Проблема именно в людях.

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

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

Сильное заявление. Т.е. например, Вы тернарную запись if которая есть во многих языках тоже за синтаксис не признаете?

Откуда такое умозаключение?

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

Синтаксис записи функции — правила, которым должна удовлетворять запись определения или вызова функции; форма записи функции.

Полностью согласен. Только вот такая запись — это просто использование имеющегося в языке синтаксиса, она не приносит в язык ничего нового.

(caar x)    => (car (car x))

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

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

Синтаксический сахар – это структурные улучшения/упрощения

Если для Вас

(caar x)    => (car (car x))

не упрощение которое предоставляет альтернативный способ записи уже имеющейся в языке синтаксической конструкции, и при этом является более удобным, или более кратким, то о чем с Вами можно дальше разговаривать? Может о погоде? У меня вот 23 градуса тепла и солнышко греет.

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

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

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

Мало того что Вы экстраполируете пару человек на весь тред пытаясь подкрепить этим свое мнение (аппеляция к большинству) так Вы же даже не понимаете что не со мной спорите, Вы с законами логики спорите. Для того чтобы понять о чем я пишу, достаточно выдохнуть, посчитать до 10 и внимательно перечитать мои сообщения начиная с ответа на вопрос про 28 сахарков.

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

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

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

Альтернативный синтаксис это когда вместо (qoute var) пишут 'var. А если я вместо (сdr x) буду писать (rest x) это ничего синтаксически не меняет. Для особо тупых: не любой сахар является синтаксическим сахаром.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 2)
Ответ на: комментарий от no-such-file

Если Вы возьмете имя функции и напишите его неправильно - это будет синтаксической ошибкой (в том же SBCL регистр не важен, но возьмем для простоты любой язык где регистр символов важен). Либо просто ошибетесь и напишите название функции неправильно, то это тоже будет синтаксической ошибкой. Хоть это понимание Вам доступно?

Отсюда, по логике, если это ошибка синтаксиса, то вызвавшая ошибку сущность также относится к синтаксису.

Вы либо путаете синтаксис с семантикой языка либо троллите меня атакой тупостью. Прекращайте.

В топике мы последовательно прошли от «Это не синтаксический сахар» через «это не синтаксис» до

не любой сахар является синтаксическим сахаром.

Ну есть еще сахар который в чай.

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

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

Если мы не можем прийти к соглашению в базовых вещах, то о каком вообще общении может идти речь? Я как-то не готов общаться с теми кто отрицает существование синтаксиса функций. Попробовал объяснить (знаю, я плохой объяснятор), воззвал к логике. Не помогло. Ну что уж теперь - насильно мил не будешь.

Obezyan
()