Вопрос-Ответ

generating variable names on fly in python [duplicate]

генерация имен переменных на лету в python

Есть ли способ, которым я могу генерировать имена переменных в python в цикле и присваивать им значения? Например, если у меня есть

prices = [5, 12, 45]

Я хочу

price1 = 5
price2 = 12
price3 = 45

Могу ли я сделать это в цикле или что-то в этом роде вместо ручного присвоения price1 = prices[0], price2 = prices[1] и т.д.

Спасибо.

Редактировать

Многие люди предлагали мне написать причину, по которой это требуется. Во-первых, были моменты, когда я думал, что это может быть удобнее, чем использование списка...Я не помню точно, когда, но мне кажется, я думал об использовании этого, когда существует много уровней вложенности. Например, если у вас есть список списков списков, определение переменных описанным выше способом может помочь снизить уровень вложенности. Во-вторых, сегодня я подумал об этом, пытаясь научиться использовать Pytables. Я только что наткнулся на Pytables и увидел, что при определении структуры таблицы имена и типы столбцов описываются следующим образом:

class TableFormat(tables.IsDescription):
firstColumnName = StringCol(16)
secondColumnName = StringCol(16)
thirdColumnName = StringCol(16)

Если у меня 100 столбцов, ввод имени каждого столбца явно кажется большой работой. Итак, я задался вопросом, есть ли способ генерировать эти имена столбцов "на лету".

Переведено автоматически
Ответ 1

Если вы действительно хотите создавать их "на лету", вы можете присвоить dict, который возвращается либо globals(), либо locals() в зависимости от того, в каком пространстве имен вы хотите их создать:

globals()['somevar'] = 'someval'
print somevar # prints 'someval'

Но я бы не рекомендовал этого делать. В общем, избегайте глобальных переменных. Использование locals() часто просто скрывает то, что вы на самом деле делаете. Вместо этого создайте свой собственный dict и присвоите ему значение.

mydict = {}
mydict['somevar'] = 'someval'
print mydict['somevar']

Изучите дзен python; запустите это и хорошо изучите:

>>> import this
Ответ 2

Хотя я не вижу особого смысла, вот он:

for i in xrange(0, len(prices)):
exec("price%d = %s" % (i + 1, repr(prices[i])));
Ответ 3

Для объекта вы можете добиться этого с помощью setattr

>>> class A(object): pass
>>> a=A()
>>> setattr(a, "hello1", 5)
>>> a.hello1
5
Ответ 4

Я понял вашу проблему, и вот мой ответ:

prices = [5, 12, 45]
list=['1','2','3']

for i in range(1,3):
vars()["prices"+list[0]]=prices[0]
print ("prices[i]=" +prices[i])

поэтому при печати:

price1 = 5 
price2 = 12
price3 = 45
python