Python eval() 関数

Python3 組み込み関数


eval()文字列内の Python 式を実行するための Python の組み込み関数です。

eval()文字列を受け取り、それを Python コードとして実行し、実行結果を返します。これは強力な機能ですが、不適切に使用するとセキュリティリスクをもたらします。

単語の解説: evalであるevaluate(評価)の略です。


基本構文とパラメータ

構文形式

eval(expression, globals, locals)

パラメータの説明

  • パラメータ expression:
    • 型: 文字列
    • 説明: 実行する Python 式。
  • パラメータ globals(オプション):
    • 型: 辞書
    • 説明: グローバル名前空間。
  • パラメータ locals(オプション):
    • 型: 辞書
    • 説明: ローカル名前空間。

関数の説明

  • 戻り値: 式の実行結果を返します。
  • セキュリティ警告: 信頼できない入力に使用しないでください。eval()、コードインジェクション攻撃を引き起こす可能性があります。

例

例1:基本的な使い方

例

# 数式を計算
result = eval("1 + 2 + 3")
print(result)  # 出力: 6

# 変数を使用
x = 10
result = eval("x * 2")
print(result)  # 出力: 20

# 複雑な式
result = eval("2 ** 3 + 4 * 5")
print(result)  # 出力: 28

# 関数呼び出し
result = eval("len('hello')")
print(result)  # 出力: 5

期待される実行結果:

6
20
28
5

コードの解説:

  1. eval()算術式を実行できます。
  2. 定義済みの変数を参照できます。
  3. 組み込み関数を呼び出せます。

例2:制限された環境

例

# 使用可能な関数と変数を制限
x = 10
y = 20

# 制限付きのグローバル辞書を作成
safe_dict = {"x": x, "y": y, "abs": abs}

result = eval("x + y", safe_dict)
print(result)  # 出力: 30

# 危険な関数へのアクセスは許可されていません
try:
    eval("__import__('os').system('ls')", {})
except NameError as e:
    print(f"セキュリティ制限: {e}")

期待される実行結果:

30
安全限制: name '__import__' is not defined

この例は、globals 辞書を制限することで、eval()の安全性を高める方法を示しています。


Python3 組み込み関数


その他の拡張