Когда вы вызываете vars () внутри функции relay_btn
, вы по-прежнему обращаетесь к переменным в области действия этой функции.
Здесь я возвращаю их в глобальную область с помощью return
и назначаюпеременных там.
#!/usr/bin/env python3
var_1 = 0
var_2 = 0
def relay_btn(relay_number):
var_n = "var_" + str(relay_number)
return var_n, relay_number
var_n, value = relay_btn(1)
vars()[var_n] = value
var_n, value = relay_btn(2)
vars()[var_n] = value
print(var_1)
print(var_2)
Это не так просто сделать все внутри функции с динамически генерируемым именем переменной .. Так как вы не можете использовать eval
с присваиваниями ... но я надеюсь, что яможет убедить вас найти другой способ сделать то, что вы делаете с этим .. это обычно считается плохой идеей.Есть ли причина, по которой вы не можете использовать структуру данных, предназначенную для хранения динамически сгенерированных ассоциаций значений ключей, таких как словарь?
#!/usr/bin/env python3
d = {}
d["var_1"] = 0
d["var_2"] = 0
def relay_btn(relay_number, d):
d["var_{}".format(relay_number)] = relay_number
relay_btn(1, d)
relay_btn(2, d)
print(d["var_1"])
print(d["var_2"])