Pythonでコードを動的に実行できる`exec()`関数について、基本的な使い方から実践的な例まで詳しく解説します。

exec()関数とは

`exec()`は、文字列として渡されたPythonコードを実行する組み込み関数です。動的にコードを生成して実行する必要がある場合に使用されます。

基本的な使い方

# 単純な文字列の実行
exec('print("Hello World")')

# 複数行のコードを実行
code = """
x = 5
y = 10
print(x + y)
"""
exec(code)

グローバル/ローカルスコープの指定

`exec()`関数は、実行環境のスコープを指定することができます:

# グローバル変数とローカル変数を指定
global_dict = {}
local_dict = {}
exec('x = 1', global_dict, local_dict)
print(local_dict['x'])  # 出力: 1

実践的な使用例

1. 動的な変数生成

# 複数の変数を動的に生成
for i in range(3):
    exec(f'var_{i} = {i}')
print(var_0, var_1, var_2)  # 出力: 0 1 2

2. 設定ファイルの読み込み

# 設定ファイルの内容を実行
config_str = """
DEBUG = True
MAX_CONNECTIONS = 100
SERVER_NAME = "production"
"""
exec(config_str)

セキュリティ上の注意点

`exec()`関数は強力な機能ですが、信頼できないコードを実行すると重大なセキュリティリスクとなります:

  • ユーザー入力を直接`exec()`に渡さない
  • 実行前にコードの検証を行う
  • 可能な限り制限された環境で実行する

代替手段の検討

`exec()`の使用が適切でない場合、以下の代替手段を検討してください:

  • `eval()`関数(式の評価のみ)
  • JSON/YAMLパーサー(設定ファイル用)
  • テンプレートエンジン

まとめ

`exec()`関数は、Pythonで動的なコード実行を可能にする強力なツールです。適切に使用することで、柔軟なプログラミングが可能になりますが、セキュリティリスクに注意が必要です。代替手段の検討も含めて、使用する際は慎重に判断しましょう。