Pythonで文字列を評価する方法をご紹介します。
Pythonコードとして文字列を評価(eval)する方法としては大きく「eval」と「exec」の2つがあります。
ざっくり区別すると
- evalは単一の式を評価(evaluate an expression)
- execは複数の文を実行(execute statements)
するためのものです。
順に見ていきます。
eval
result = eval("5") # 5
result = eval("3 + 4") # 7
result = eval("'%s is a %s' % ('tama', 'cat')") # tama is a cat
evalは式を評価して、評価した値を返してくれます。基本は「名前 = eval(式)」という形で使うことになるかと思います。
次にexecを見てみます。
exec
exec("a = 15")
print a # 15
exec("if True: print 'it is True'")
exec("""
total = 0
for i in range(5):
print i
total += i
print total
""")
evalが単一の式を評価するのに対し、execは式を含む複数の文を実行します。上の例のように、複数行にわたるコードでも問題なく実行することができます。execの中で宣言された値(totalなど)はexecの外でも有効となります。
式か文かの区別はちょっとわかりづらいのですが、たとえば
- 対話型モードで入力しEnterを押したときに値が返ってくるなら式
- if文に if expression: という形で渡して構文エラーとならないなら式
と言えるでしょうか。
以上です。