2014/01/21

Python Tips:文字列を評価したい

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: という形で渡して構文エラーとならないなら式

と言えるでしょうか。

以上です。


参考
Why is Python's eval() rejecting this multiline string, and how can I fix it? - Stack Overflow
dynamic - What's the difference between eval, exec, and compile in Python? - Stack Overflow
In Python, why doesn't exec work in a function with a subfunction? - Stack Overflow

0 件のコメント: