How can you dynamically create variables? [duplicate]
Как можно динамически создавать переменные?
Я хочу создавать переменные динамически в Python. Есть ли у кого-нибудь какие-нибудь творческие средства для этого?
Переведено автоматически
Ответ 1
Если нет непреодолимой необходимости создавать беспорядок из имен переменных, я бы просто использовал словарь, где вы можете динамически создавать имена ключей и связывать значение с каждым.
a = {} k = 0 while k < 10: # dynamically create key key = ... # calculate value value = ... a[key] = value k += 1
В collections модуле также есть несколько интересных структур данных, которые могут быть применимы.
Ответ 2
globals() возвращает словарь переменных модуля. Вы можете создать новую переменную, создав ключ в этом словаре:
# By default, a module has some hidden variables defined print({k: v for k, v inglobals().items() ifnot k.startswith("__")})
for i inrange(1, 11): globals()[f"my_variable_{i}"] = i
print() print(my_variable_1) print(my_variable_2) # and so on
print() print({k: v for k, v inglobals().items() ifnot k.startswith("__")})
Используйте метод exec() для запуска произвольного кода. Допустим, у вас есть словарь, и вы хотите превратить каждый ключ в переменную с его исходным значением по словарю, вы можете сделать следующее:
>>> c = {"one": 1, "two": 2} >>> for k, v in c.items(): ... exec(f"{k} = {v}") ... >>> one 1 >>> two 2
Ответ 4
Запихивать что-либо в глобальное и / или локальное пространства имен - плохая идея. Использование dict настолько похоже на какой-то другой язык ... d['constant-key'] = value просто выглядит неуклюже. Python - это OO. По словам мастера: """Пространства имен - это потрясающая идея - давайте делать больше таких!"""
Вот так:
>>> classRecord(object): ... pass ... >>> r = Record() >>> r.foo = 'oof' >>> setattr(r, 'bar', 'rab') >>> r.foo 'oof' >>> r.bar 'rab' >>> names = 'id description price'.split() >>> values = [666, 'duct tape', 3.45] >>> s = Record() >>> for name, value inzip(names, values): ... setattr(s, name, value) ... >>> s.__dict__ # If you are suffering from dict withdrawal symptoms {'price': 3.45, 'id': 666, 'description': 'duct tape'} >>>