Уведомления

Группа в Telegram: @pythonsu

#1 Июль 17, 2012 22:45:34

Bambay
Зарегистрирован: 2012-07-17
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание переменных по маске.

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

x1=1
x2=2
x3=3
x4=4

x10=10
То есть, переменные создаются внутри цикла.
Заранее спасибо за помощь.

Отредактировано Bambay (Июль 17, 2012 22:45:50)

Офлайн

#2 Июль 17, 2012 22:52:50

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Создание переменных по маске.

Для этого существуют коллекции. Например, списки.

Но если нечего делать, то, конечно, можно написать:

>>> for idx in xrange(10):
...     exec('x{0} = {1}'.format(idx, idx + 1))
...     
... 
>>> x0
1
>>> x2
3



Отредактировано fata1ex (Июль 17, 2012 22:54:55)

Офлайн

#3 Июль 17, 2012 23:28:31

Bambay
Зарегистрирован: 2012-07-17
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание переменных по маске.

fata1ex
Оператор “exec” интерпретирует строку и выполняет ее? Я искал его в стандартной библиотеке и не нашел.

Офлайн

#4 Июль 17, 2012 23:40:19

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Создание переменных по маске.

Ещё раз говорю: этим пользоваться нельзя. Так не пишут.
Динамическая интерпретация нужна крайне редко, и это, определённо, не тот случай. Опишите вашу задачу, её наверняка можно решить по-другому.

http://docs.python.org/reference/simple_stmts.html#exec



Отредактировано fata1ex (Июль 17, 2012 23:42:20)

Офлайн

#5 Июль 17, 2012 23:44:35

Bambay
Зарегистрирован: 2012-07-17
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание переменных по маске.

Задачи нет, я просто удовлетворил свое любопытство. Спасибо за помощь!

Офлайн

#6 Июль 17, 2012 23:45:22

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Создание переменных по маске.

Ок. Тогда я спокоен :)



Офлайн

#7 Июль 18, 2012 00:39:02

EBFE
Зарегистрирован: 2012-07-03
Сообщения: 99
Репутация: +  20  -
Профиль   Отправить e-mail  

Создание переменных по маске.

exec == evil

>>> vars().update([('x{idx}'.format(idx=i), i) for i in range(10)])
>>> x0
0
>>> x3
3
>>> locals().update([('y{idx}'.format(idx=i), i) for i in range(10)])
>>> y3
3
>>> y9
9
>>> import sys
>>> myself = sys.modules[__name__]
>>> for i in range(10):
...   setattr(myself, 'z' + str(i), i)
...
>>> z7
7

Отредактировано EBFE (Июль 18, 2012 00:40:15)

Офлайн

#8 Июль 18, 2012 00:52:57

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Создание переменных по маске.

Насчет locals я еще подумал, а вот до первого и третьего варианта моё сознание не добралось. Чему я очень рад :)

Как говорится, вы знаете толк.



Отредактировано fata1ex (Июль 18, 2012 00:53:23)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version