Как изменить имя переменной?
Задача такова как поменять имя g на имя переменной которая создается ranalf? Тоесть примерно как в 50 строке. Спасибо заранее.
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как для переменной задать переменное имя
Вот часть кода: for Str_Otvet,Value_Otvet in Otvet: A_Radiobutton = Radiobutton(windows.
Изменить имя переменной в зависимости от данных переменной
Задача такова: пользователь вводит сроку и нужно создать объект с именем, как в строке. Пробовал.

Использовать значение строковой переменной как имя новой переменной
Есть некий объект (ob = ) и строка (st ="name"). Так вот нужно, чтобы name стало именем объекта ob.
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
Ничего не понял, но очень интересно.
1 2 3 4
g = 1 new_name = 'testvar' globals()[new_name] = globals().pop('g') print(testvar)
Как изменить название переменной, одновременно по всему коду, но в пределах видимости этой переменной?
Итак мы объявили переменную и проводим с ней некие манипуляции в коде. И мы вдруг передумали и решили назвать переменную по другому. Это можно было бы сделать автозаменой по всему коду. Но хочется сделать это в пределах видимости (доступности) переменной. Речь идет о js и webstorm. Можно привести примеры из других языков и IDE.
- Вопрос задан более трёх лет назад
- 32507 просмотров
1 комментарий
Оценить 1 комментарий
Переменная в имени переменной Python
такие вещи как exec() , globals() , setattr(mod, name, x) очень редко следует использовать. Практически наверняка, чтобы вы не делали, есть лучше для конкретной задачи решение нежели exec вызов. К примеру, почему вы не хотите points список использовать вместо point1, point2, point3, etc переменных? Старайтесь вопросы самодостаточными делать
22 мар 2018 в 13:13
5 ответов 5
Сортировка: Сброс на вариант по умолчанию
Можно и без eval обойтись:
for i in range(6): globals()['num_%s' % i] = i ** 2 print(num_1) # 1 print(num_2) # 4 print(num_3) # 9 print(num_4) # 16 print(num_5) # 25
PS.
Но лучше не играться с глобальными переменными, т.к. можно случайно поменять значение тем, что были. Лучше в таких случаях складывать в словарь:
d = dict() for i in range(6): d['num_%s' % i] = i ** 2 print(d['num_5'])
Тоже самое, но с рефакторингом (python3):
d = ': i ** 2 for i in range(6)> print(d['num_5'])
Отслеживать
ответ дан 22 мар 2018 в 17:00
76.7k 6 6 золотых знаков 54 54 серебряных знака 121 121 бронзовый знак
Если я правильно понял, вам требуется создать переменную по строковому значению лексемы:
i = 'vars' # магия print(str_vars)
В качестве магии можно использовать exec:
exec('str_%s = 123' % i)
i = 'vars' exec('str_%s = 123' % i) print(str_vars)
Определение переменной обязательно
Отслеживать
ответ дан 22 мар 2018 в 12:59
Перцев Роман Перцев Роман
445 2 2 серебряных знака 6 6 бронзовых знаков
Спасибо. exec по сути вызывает(ссылается на) переменную, но не определяет ее. Есть ли что-то на подобии следующего: exec(‘str_%s = 123’ % i) = 25?
22 мар 2018 в 13:14
exec не вызывает переменную и не ссылается. exec строит из аргументов строку, а дальше она обрабатывается как самый обычный код. В данном случае на выходе из exec получается str_vars = 123 . После вашего exec(‘str_%s = 123’ % i) = 25 получится str_vars = 123 = 25 что приведет к «инвалид синтакс».
22 мар 2018 в 13:27
Вам не нужно использовать «переменную в имени переменной». Вместо этого вам нужны просто списки. К примеру:
s = ['a', 'b', 'c'] i = 2 print(s[i]) # c
Использовать exec и eval без особой необходимости — обычно плохая идея.
В вашем предыдущем вопросе я также дал ответ, как реализовать через списки.
Отслеживать
ответ дан 22 мар 2018 в 16:10
47.8k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
name = "str_" for n in range (5): exec(name + "%s = %d" % (n,n))
На выходе будет пять переменных str_0 до str_4 со значениями от 0 до 4.
Как оно работает: exec строит из аргументов строку (как print ), а дальше эта строка обрабатывается как самый обычный код. В данном случае вместо переменных подставляются их значения и получается в первой итерации
str_0 = 0
str_1 = 1
Отслеживать
ответ дан 22 мар 2018 в 13:05
25.9k 7 7 золотых знаков 31 31 серебряный знак 48 48 бронзовых знаков
###Описание проблемы: #Введите целое число (выбран ввод пользователем для примера, #чтобы показать что "x" заранее неизвестно) x = input("Введите число 1, 2 или 3: >> ") #В зависимости от ввода пользователя результатом будет соответствующий список list_1 = ['a1', 'a2', 'a3', 'a4'] list_2 = ['b1', 'b2', 'b3', 'b4'] list_3 = ['c1', 'c2', 'c3', 'c4'] if x == "1": res = list_1 elif x == "2": res = list_2 elif x == "3": res = list_3 print(res) #В ходе более гибкого решения (велосипеда) ТС задал Вам вопрос. #Готов снести если не прав. #Все что нужно было, при условии что заранее известны связки #(переменной x и списком), создать обычный словарь: my_dict = < "1": ['a1', 'a2', 'a3', 'a4'], "2": ['b1', 'b2', 'b3', 'b4'], "3": ['c1', 'c2', 'c3', 'c4'] >print(my_dict.get(x))
Отслеживать
ответ дан 24 апр 2018 в 13:54
Dmitry Erohin Dmitry Erohin
986 5 5 серебряных знаков 8 8 бронзовых знаков
Для числовых (по сути) индексов не нужен словарь: ideone.com/QhJ1cc
24 апр 2018 в 16:37
Не важно что использовать в качестве контейнера dict или list, я показал что проблема у ТС на этапе проектирования и решается ранним связыванием
Создание переменных с переменными именами в Python
Существуют ситуации, когда может возникнуть необходимость создания переменных с динамическими именами, то есть именами, которые определяются в процессе выполнения программы. Например, при обработке больших данных, когда количество и имена переменных заранее неизвестны.
Однако, стоит учесть, что использование такого подхода может привести к ряду проблем. Во-первых, это может затруднить отладку и чтение кода, так как не всегда очевидно, какие переменные были созданы и что они содержат. Во-вторых, это может привести к неожиданным ошибкам, если имя переменной совпадет с именем уже существующей переменной или зарезервированным словом в Python.
Однако, если все же возникла необходимость использования такого подхода, в Python есть несколько способов реализации этой идеи.
Способ 1. Использование словарей
В Python словарь — это структура данных, которая позволяет хранить пары «ключ-значение». Использование словаря позволяет создавать и обращаться к переменным по их «ключам», которые могут быть динамическими.
variables = <> variables["var1"] = 1 variables["var2"] = 2
Способ 2. Использование функции globals()
Функция globals() возвращает словарь, который содержит все глобальные переменные. Таким образом, можно добавить в этот словарь новую переменную с динамическим именем.
globals()["var1"] = 1
Однако, следует быть осторожным с этим методом, так как он может привести к неожиданным последствиям, если имя новой переменной совпадет с именем уже существующей глобальной переменной или зарезервированным словом.
Вывод
Создание переменных с переменными именами в Python возможно, но следует использовать этот подход с осторожностью. Чаще всего, решение, которое не требует создания таких переменных, будет более безопасным и понятным.