Pythonで可変変数
- ある変数の値を変数名として使用できる変数のことを、perlでは可変変数と読んでいるようです。
% perl -e '$var1="var2"; $var2="Value of var2"; print "$$var1\n"' Value of var2 %
記号を使うと簡潔に表現でき、記号にも良い面があることが分かります。 - Python でこれを実現するにはどうすれば良いでしょうか? 具体的な例として、「年齢」という引数を受け取って、「年齢別件数」という名前の辞書を返す場合を考えます。マニュアルを見たり、インターネットを検索しても難解な解説ばかりで、インスタントな実現方法を見つけることが出来ませんでした。そこで代用となるやり方を考えて見ました。
- まず、変数の値を変数名として評価し、値を展開するには、evalを使うのが簡単だと思います。
1 var1 = 'var2' 2 var2 = 'Value of var2' 3 eval(var1) 4 'Value of var2'
- ただ、これだと代入文の左辺では使えません。多少乱暴ですが、
1 arg = "nenrei" 2 exec('dict_' + arg + ' = {}') 3 >>> dict_nenrei 4 {}
- でも良く考えてみると本当に実現したのは、「ある名前に対応する値(この場合はそれを変数名として見た場合のその変数の内容)を返す」ことです。途中の操作が必要無ければ(始まりと結果だけ見れば)、これは辞書そのものです。
1 valueOf['nenrei'] = {} 2 valueOf['nenrei'] = {'nenrei': 'kensuu'} 3 >>> valueOf['nenrei'] 4 {'nenrei': 'kensuu'}