Pythonでeval()関数を使用すると文字列を式として評価することができます。単純な計算式から複雑な式まで、文字列として記述された式を実行時に評価できる便利な機能です。
eval()関数の基本的な使い方
eval()関数の基本的な構文は以下の通りです:
result = eval(expression)expressionには評価したい式を文字列として指定します。
例えば:
# 基本的な計算式
print(eval('2 + 3')) # 出力: 5
print(eval('10 * 5')) # 出力: 50
# 変数を含む式
x = 10
y = 5
print(eval('x + y')) # 出力: 15eval()関数の実用的な使用例
1. 数学的な式の評価
# 複雑な数式の計算
formula = '(2 + 3) * 4 / 2'
result = eval(formula)
print(result) # 出力: 10.02. 文字列から関数の実行
# 組み込み関数の利用
print(eval('len("Python")')) # 出力: 6
print(eval('abs(-42)')) # 出力: 42eval()関数使用時の注意点
1. セキュリティリスク
eval()関数は任意のPythonコードを実行できるため、セキュリティ上のリスクがあります。特に、ユーザー入力を直接eval()に渡すことは避けるべきです。
# 危険な例 - 絶対に行わないでください
user_input = input("式を入力してください: ")
eval(user_input) # セキュリティリスク!2. 安全な代替手段
数式の評価には、以下のような安全な代替手段があります:
import ast
def safe_eval(expr):
try:
# astを使用して式を解析
tree = ast.parse(expr, mode='eval')
# 許可する演算子のみを含むかチェック
allowed_operators = (ast.Add, ast.Sub, ast.Mult, ast.Div, ast.Num)
for node in ast.walk(tree):
if not isinstance(node, allowed_operators):
raise ValueError("不正な演算子が含まれています")
return eval(expr)
except:
return None
# 使用例
print(safe_eval('2 + 2')) # 出力: 4
print(safe_eval('os.system("rm -rf *")')) # 出力: Noneまとめ
eval()関数は強力な機能を持っていますが、使用する際は以下の点に注意が必要です:
- 信頼できる入力のみを評価する
- セキュリティリスクを考慮する
- 必要に応じて安全な代替手段を使用する
適切に使用すれば、eval()関数はPythonプログラミングにおける便利なツールとなります。