Перейти к содержимому

Как изменить название переменной в python

  • автор:

Как изменить имя переменной?

Задача такова как поменять имя 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 возможно, но следует использовать этот подход с осторожностью. Чаще всего, решение, которое не требует создания таких переменных, будет более безопасным и понятным.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *