Форум сайта python.su
0
В программировании, понятное дело, нуб.
Недавно возник вопрос: Можно ли как то создавать по заданной маске и тут же определять переменные с помощью циклов while или for, чтобы на выходе получалось что-то вроде:
x1=1
x2=2
x3=3
x4=4
…
x10=10
То есть, переменные создаются внутри цикла.
Заранее спасибо за помощь.
Отредактировано Bambay (Июль 17, 2012 22:45:50)
Офлайн
52
Для этого существуют коллекции. Например, списки.
Но если нечего делать, то, конечно, можно написать:
>>> for idx in xrange(10): ... exec('x{0} = {1}'.format(idx, idx + 1)) ... ... >>> x0 1 >>> x2 3
Отредактировано fata1ex (Июль 17, 2012 22:54:55)
Офлайн
0
fata1exОператор “exec” интерпретирует строку и выполняет ее? Я искал его в стандартной библиотеке и не нашел.
Офлайн
52
Ещё раз говорю: этим пользоваться нельзя. Так не пишут.
Динамическая интерпретация нужна крайне редко, и это, определённо, не тот случай. Опишите вашу задачу, её наверняка можно решить по-другому.
http://docs.python.org/reference/simple_stmts.html#exec
Отредактировано fata1ex (Июль 17, 2012 23:42:20)
Офлайн
0
Задачи нет, я просто удовлетворил свое любопытство. Спасибо за помощь!
Офлайн
52
Ок. Тогда я спокоен :)
Офлайн
20
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)
Офлайн
52
Насчет locals я еще подумал, а вот до первого и третьего варианта моё сознание не добралось. Чему я очень рад :)
Как говорится, вы знаете толк.
Отредактировано fata1ex (Июль 18, 2012 00:53:23)
Офлайн