Форум сайта python.su
0
Есть список в котором хранятся имена переменных, надо получить список с их значениями(в том же порядке). Как это сделать?
PS Печатать значения я умею. С помощью exec().
Отредактировано koast (Дек. 30, 2012 15:27:33)
Офлайн
568
Значения переменных по имени можно получить с помощью функции globals(), но если Вам это понадобилось без веской причины, то Ваш код требует глубокого переосмысления. Постольку поскольку этот вопрос вообще возник - веской причины нет. Думайте лучше над кодом, а не над путями обхода сложных мест. Если расскажите сообществу, в чем вообще Ваша задача состоит, уверен, что Вам помогут ее решить без костылей.
Офлайн
0
FishHook
FishHookИтак, есть строка с арифметическим выражением, надо посчитать ее значение.
Значения переменных по имени можно получить с помощью функции globals(), но если Вам это понадобилось без веской причины, то Ваш код требует глубокого переосмысления. Постольку поскольку этот вопрос вообще возник - веской причины нет. Думайте лучше над кодом, а не над путями обхода сложных мест. Если расскажите сообществу, в чем вообще Ваша задача состоит, уверен, что Вам помогут ее решить без костылей.
Офлайн
0
можно использовать eval
Но сомневаюсь, что это хорошая практика.
Отредактировано Viktors (Янв. 2, 2013 21:27:04)
Офлайн
Если знаешь, что делаешь, чем eval плох-то, вот непойму! Сам несколько раз на смартфоне писал калькулятор, результат выражения именно так и считывался, обработать ошибки не составляет труда, наряду со слежением за корректностью ввода значений. А зачем тогда вообще eval придумывали, что все так от него открещиваются?
Офлайн
0
eval, как известно, предоставляет возможность сделать иньекцию кода.
Например, можно импортировать модуль для работы с ОС, а дальше - насколько хватит фантазии 
Офлайн
Извините за вспыльчивый мой предыдущий пост, просто уже не в первый раз люди пишут, что eval использовать нежелательно (насчет exec то-же), предлагали вычислять выражение парсерами, когда, черт возьми, eval же. Объяснить кто-то сможет, почему нет, своими словами, без отмазки ссылками на доки?
Офлайн
173
dimy44Судя по сообщению ТС, можно обойтись без eval если переписать код.
Извините за вспыльчивый мой предыдущий пост, просто уже не в первый раз люди пишут, что eval использовать нежелательно (насчет exec то-же), предлагали вычислять выражение парсерами, когда, черт возьми, eval же. Объяснить кто-то сможет, почему нет, своими словами, без отмазки ссылками на доки?
42**42**42**42**42
Офлайн
Спасибо за ответ. Примерно это я и ожидал… А что Вы посоветуете делать в случае получения такого выражения? Парсер?
Офлайн
173
Для калькулятора, наверное, парсер. В общем случае может помочь выполнение в песочнице (особо не интересовался, но вроде PyPy может), т.к. и за памятью надо следить. Например, с eval() остается такая возможность:
a = [1] * 99999999
Офлайн