Python転職初心者向けエンジニアリングブログ

Pythonに魅了されたあなたへ。エンジニアリングの扉を開く転職初心者向けのブログへようこそ。このブログでは、Pythonの奥深さに迫りながら、エンジニアリングへの転職に役立つ情報を提供しています。未経験者から始めるPythonエンジニアリングの世界への一歩を踏み出すためのガイダンス、ベストプラクティス、そして成功事例など、初心者の方でもわかりやすいコンテンツをお届けします。

Pythonの`eval()`および`exec()`関数: 動的なコード実行の可能性

LYPプレミアム会員 python

Pythonのeval()およびexec()関数: 動的なコード実行の可能性

Pythonには動的なコードの実行を可能にする2つの重要な関数があります。それがeval()およびexec()関数です。この記事では、これらの関数について詳しく説明し、具体的なコード例を交えてその使い方を解説します。

eval()関数

基本的な使い方

eval()関数は、Pythonの式を文字列として受け取り、その結果を返します。基本的な構文は以下の通りです。

eval(expression, globals=None, locals=None)
  • expression: 評価するPythonの式を表す文字列。
  • globals: グローバルな名前空間を指定する辞書。デフォルトはNone
  • locals: ローカルな名前空間を指定する辞書。デフォルトはNone

以下は基本的な例です。

result = eval('2 + 3')
print(result)  # 出力: 5

この例では、eval()関数を使って文字列 '2 + 3' を評価し、その結果を取得しています。

変数の値を利用する

eval()関数は、指定した文字列内で変数が参照されている場合、その変数の値を取得できます。

x = 5
y = 10
expression = 'x + y'

result = eval(expression)
print(result)  # 出力: 15

この例では、xyという変数が文字列 expression 内で参照され、eval()関数がそれらの変数の値を取得して計算しています。

グローバルおよびローカルな名前空間の利用

eval()関数はオプションとして、グローバルおよびローカルな名前空間を指定することができます。これにより、式内で参照される変数のスコープを調整できます。

x = 5

def evaluate_expression():
    y = 10
    expression = 'x + y'
    result = eval(expression, globals(), locals())
    print(result)

evaluate_expression()  # 出力: 15

この例では、eval()関数に globals() および locals() を使用して、グローバルおよびローカルな名前空間を指定しています。

exec()関数

基本的な使い方

exec()関数は、Pythonの文を文字列として受け取り、その文を実行します。基本的な構文は以下の通りです。

exec(source, globals=None, locals=None)
  • source: 実行するPythonの文を表す文字列。
  • globals: グローバルな名前空間を指定する辞書。デフォルトはNone
  • locals: ローカルな名前空間を指定する辞書。デフォルトはNone

以下は基本的な例です。

exec('result = 2 + 3')
print(result)  # 出力: 5

この例では、exec()関数を使って文字列 'result = 2 + 3' を実行し、その結果として変数 result が生成されています。

変数の値を利用する

exec()関数も、eval()関数同様に変数の値を利用することができます。

x = 5
y = 10
source = 'result = x + y'

exec(source)
print(result)  # 出力: 15

この例では、変数 xy の値を利用して、result という変数を生成しています。

グローバルおよびローカルな名前空間の利用

exec()関数も、オプションとしてグローバルおよ

びローカルな名前空間を指定することができます。

x = 5

def execute_code():
    y = 10
    source = 'result = x + y'
    exec(source, globals(), locals())
    print(result)

execute_code()  # 出力: 15

この例では、exec()関数に globals() および locals() を使用して、グローバルおよびローカルな名前空間を指定しています。

注意点

  • eval()およびexec()関数は慎重に使用する必要があります。不正なコードの実行やセキュリティ上の問題が発生する可能性があります。
  • 文字列として渡されたコードや式が信頼できるソースから来ていることを確認し、不正な入力を避けるようにしましょう。

まとめ

eval()およびexec()関数は、Pythonで動的なコードの実行を可能にする強力なツールです。これらを使用することで、文字列からコードを生成し、実行することができます。ただし、注意が必要であり、安全に使用するためには適切なセキュリティ対策が必要です。