как преобразовать строку в имя переменной? питон

как я могу преобразовать строку в имя переменной? У меня есть несколько переменных value1, value2, value3 и value1 = 5, когда я использую

x = 1 print(str("value" + str(x)))

он возвращает "value1", а не "5"

редактировать: это не дубликат, потому что я спрашиваю, как решить мою проблему, а не о том, хорошо или плохо использовать eval (это ссылка, на которую вы меня направили)

поэтому, когда я использую eval для изменения значения переменной, она не работает («не может назначить вызов функции»),

global('newValue' + str(z)) eval('newValue' + str(z)) = y + value

и если вы не рекомендуете использовать eval, что вы должны использовать вместо этого? потому что у меня много «если значение1 ‹» и «если значение 2 ‹», но я хочу изменить его на какое-то время


person l.b.dev    schedule 19.02.2018    source источник
comment
Я бы порекомендовал вам пользоваться словарями. Я считаю, что это будет намного лучше и удобнее для вашего случая. В любом случае, вы можете попробовать что-то вроде этого exec("print(value" + str(x) + ")"), но это ужасная практика.   -  person Nikitka    schedule 19.02.2018


Ответы (1)


print(eval(str(“value” + str(x))))

Но нельзя использовать eval, даже если вы знаете, что это полностью безопасно. Всегда есть лучший способ.

person Hou Lu    schedule 19.02.2018
comment
И даже в этом случае вам все равно не следует использовать eval — есть есть решения получше. - person bruno desthuilliers; 19.02.2018
comment
такие как ? @brunodesthuilliers - person l.b.dev; 19.02.2018
comment
Сохраните эти значения в list или dict. - person Hou Lu; 19.02.2018
comment
@lb.dev в этом случае с использованием словаря, списка или объектов, а getattr являются каноническими решениями - динамические переменные в любом случае - ужасная идея. - person bruno desthuilliers; 19.02.2018
comment
Я понимаю это, но у меня есть 15 строк кода, если значение1 ‹ , если значение2 ‹ , если значение3 ‹ , если значение 15... с каждым разом 10 строк кода в нем, но мне нужно иметь значение1, чтобы иметь значение2 и так далее на. но я хочу сжать эти 150 строк кода, чтобы избежать дублирования кода. Также этот код будет применяться к чему-то вроде 10 000 первого значения, которое мне нужно изменить, поэтому это нельзя сделать со списком или словарем, потому что было бы сложно назвать все значения в словаре @brunodesthuilliers - person l.b.dev; 19.02.2018
comment
@lb.dev, если ваш код такой беспорядок, то, очевидно, у вас нет подходящей структуры данных для стоящей задачи. Просто подсказка: функции Python также являются объектами, поэтому вы можете довольно легко сопоставлять индексы с функциями (это просто список или кортеж), а также zip значения и функции. На самом деле у нас есть идеальный случай проблемы XY - вы спрашиваете о том, что вы считаете решением, вместо того, чтобы спрашивать о вашей реальной проблеме (той, которую вы пытаетесь решить с помощью этого решения). - person bruno desthuilliers; 19.02.2018