アプリ版:「スタンプのみでお礼する」機能のリリースについて

すいません教えて下さい。

pythonで以下の変数をセットしています。

aaa = 'hensu_name'

aaaで指定した'hensu_name'に対して値を入れたい場合は
どのように実装すればよいでしょうか?
(aaaに入れたstringを変数名にしたい)

よろしくお願いします。

A 回答 (3件)

exec関数を使って文字列をコードとして実行すれば、それっぽいことができるように思います。


あまりいい例を思いつかないですが、以下のような感じでしょうか?

aaa = "hensu_name"
src = aaa + " = 'hello'" #srcの中身は、"hensu_name = 'hello'"

exec(src)
print hensu_name #hello が表示される

src = "print " + aaa #srcの中身は、"print hensu_name"
exec(src) #hello が表示される


ただ、No.1の方がおっしゃっているように、あまりお勧めな方法ではありません。
文字列をコードとして実行してしまうので、少々危険な側面もあります。
悪意のあるコードを含む文字列を実行してしまうとか…。
    • good
    • 0

変数aaaに入れた文字列を使って、なにかの変数にアクセスしたいということでしょうか?


Pythonの名前空間は基本的に辞書でできています。
操作したい変数が属する名前空間のオブジェクトを取得すれば、アクセスできます。

これはローカル変数を操作する例です。
(インデントなしの一番外側lのレベルで実行しているので、locals()もglobals()も同じになってしまいます。locals()、globals()については、ドキュメントを見てください)

>>> aaa = 'hensu_name'
>>> ns = locals() #globals()でも変わりません
>>> ns[aaa] = 'value'
>>> hensu_name
'value'

こちらは、クラスのインスタンスにメンバ変数を追加してみた例です。

>>> aaa = 'hensu_name'
>>> class A(object): pass
...
>>> obj = A()
>>> obj.__dict__[aaa] = 'hoge'
>>> obj.hensu_name
'hoge'
    • good
    • 8

一応、eval を使う、という手段はありますが、あまりお勧めできません。



○辞書を使う
variable['hensu_name'] = 123

○属性だったら、
http://docs.python.jp/2/library/functions.html#g …
http://docs.python.jp/2/library/functions.html#s …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!