【Python入門】Pythonのeval関数とは?使い方と活用方法を徹底解説(Python 3.11)

Python

はじめに

Pythonには、文字列をコードとして実行できる便利な関数「eval」があります。適切に使えば柔軟なプログラムを作成できますが、不適切な使用はセキュリティリスクを伴うため注意が必要です。本記事では、Python 3.11におけるeval関数の基本から応用まで詳しく解説します。

eval関数とは?

eval関数は、文字列として与えられたPythonの式を評価(実行)し、その結果を返す組み込み関数です。例えば、動的に数式を計算したり、変数を動的に変更する場合に利用されます。

eval関数の基本構文

以下の構文でeval関数を使用できます。

eval(expression[, globals[, locals]])
  • expression:評価するPythonの式(文字列)
  • globals(オプション):グローバル変数の辞書
  • locals(オプション):ローカル変数の辞書

eval関数の使用例

数式の評価

expression = "2 + 3 * 4"
result = eval(expression)
print(result)  # 出力: 14

変数を用いた評価

x = 10
y = 5
expression = "x * y"
result = eval(expression)
print(result)  # 出力: 50

eval関数の応用例

辞書を用いた安全な評価

allowed_vars = {"a": 10, "b": 20}
expression = "a + b"
result = eval(expression, {"__builtins__": None}, allowed_vars)
print(result)  # 出力: 30

ユーザー入力を安全に評価

import ast

def safe_eval(expression):
    try:
        node = ast.parse(expression, mode='eval')
        if not all(isinstance(n, (ast.Expression, ast.BinOp, ast.Num, ast.Name)) for n in ast.walk(node)):
            raise ValueError("不正な式が含まれています")
        return eval(expression, {"__builtins__": None}, {})
    except Exception as e:
        return f"エラー: {e}"

expression = "5 + 10"
print(safe_eval(expression))  # 出力: 15

まとめ

eval関数は便利ですが、不適切な使用はセキュリティリスクを招きます。安全な使い方として、globalslocals を制限したり、ast モジュールを活用することで、リスクを軽減できます。適切な場面でevalを活用し、より柔軟なPythonプログラムを作成しましょう。