первое сообщение, поэтому играйте хорошо!Python: связывание/привязка переменных вместе в словаре
У меня есть довольно простой вопрос о словарях Python. Я хотел бы иметь какое-то значение Dict, что обновления, когда другая переменная изменяется (или, по меньшей мере, пересчитывается при его следующем вызове) - например:
mass = 1.0
volume = 0.5
mydict = {'mass':mass,'volume':volume}
mydict['density'] = mydict['mass']/mydict['volume']
Таким образом, в этом случае, mydict [ «плотность»] просто возвращает 2.0 , Если я изменю mydict ['mass'] = 2.0, плотность не будет обновляться. Хорошо. Я могу понять, почему - плотность определяется значениями, когда они были переданы в декларацию. Так что я подумал, что я мог бы подойти к этому с лямбда-выражения, например (Извиняюсь за жуткой код!):
mydict['density_calc'] = lambda x,y: x/y
mydict['density'] = mydict['density_calc'](mydict['mass'],mydict['volume'])
Но опять же, это только возвращает первоначальную плотность, несмотря на изменение mydict [ «массы»]. В качестве последней попытки я пробовал это:
def density(mass,volume): return mass/volume
mydict['density_calc'] = lambda x,y: density(x,y)
mydict['density'] = mydict['density_calc'](mydict['mass'],mydict['volume'])
Опять же, нет кубиков. Это кажется очень простой проблемой для решения, поэтому извиняюсь заранее, но если кто-нибудь сможет мне помочь, я буду очень благодарен!
Приветствия,
Dave
Это может быть ближе всего к ответу на OP, но это ужасно. – FogleBird
Спасибо всем за полезные ответы. Возможно, я должен был более подробно изложить свои требования. Мне нужно «переносить» словарь вокруг - он проходит через множество кода и дублируется и т. Д. - многие из переменных вычислительно дорого вычисляются. Я надеялся не создавать новый класс (я работаю с параллельным python, который я нашел, может быть PITA для обработки классов иногда), но я думаю, что я буду использовать это решение. Ура! – Dave
@Dave, вы должны переосмыслить свое предвзятое отношение к классам.Вычислительно дорого - причина, по которой мы используем классы. Ожидается, что у класса будет код, который позволит избежать ненужных вычислений. Атрибуты класса уже являются словарем. Перегрузка такого словаря нарушает ожидания других людей, скрывая «специальный» ключ, отличный от всех остальных. –