へっぽこびんぼう野郎のnewbie日記

けろけーろ(´・ω・`)!

Pythonで文字列(strings)を変数(variable)として扱う(globalsとlocalsとeval)

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))

... 

spam

spam

spam

こういうことは可能。(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()とか使わないほうがいい。

書けるっちゃ書けるけど、おとなしくリストを使って書いたほうが良さげ。