p1 = 'spam'
p2 = 'spam'
p3 = 'spam'
は、
>>> for i in range(1,4):
... locals()["p" + str(i)] = 'spam'
...
>>> p1
'spam'
>>> p3
'spam'
や、
>>> for i in range(1,4):
... globals()["p" + str(i)] = 'spam'
...
>>> p1
'spam'
>>> p3
'spam'
と書ける。
evalではこうは行かない。
p1 = 'spam'
p2 = 'spam'
p3 = 'spam'
の状態で、
>>> for i in range(1,4):
... print eval("p" + str(i))
...
こういうことは可能。(evalはexpression(式)を扱えるけど、statement(文)は扱えないから)
expressionは、「〜だよ!」みたいな感覚で、
statementは、「〜は、〜だよ!!」みたいな感覚。
locals と globalsの違いについて。
→locals
>>> y = 1
>>> def foo():
... locals()["y"] = 2
... print y
...
>>> foo()
1
→globals
>>> y = 1
>>> def bar():
... globals()["y"] = 2
... print y
...
>>> bar()
2
でも、あんまりglobals()とかlocals()とか使わないほうがいい。
書けるっちゃ書けるけど、おとなしくリストを使って書いたほうが良さげ。