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 22. 設定ファイルの読み込み
# 設定ファイルの内容を実行
config_str = """
DEBUG = True
MAX_CONNECTIONS = 100
SERVER_NAME = "production"
"""
exec(config_str)セキュリティ上の注意点
`exec()`関数は強力な機能ですが、信頼できないコードを実行すると重大なセキュリティリスクとなります:
- ユーザー入力を直接`exec()`に渡さない
- 実行前にコードの検証を行う
- 可能な限り制限された環境で実行する
代替手段の検討
`exec()`の使用が適切でない場合、以下の代替手段を検討してください:
- `eval()`関数(式の評価のみ)
- JSON/YAMLパーサー(設定ファイル用)
- テンプレートエンジン
まとめ
`exec()`関数は、Pythonで動的なコード実行を可能にする強力なツールです。適切に使用することで、柔軟なプログラミングが可能になりますが、セキュリティリスクに注意が必要です。代替手段の検討も含めて、使用する際は慎重に判断しましょう。