Python3 exec 関数
説明
exec文字列またはファイルに格納された Python 文を実行します。比較すると、eval,execより複雑な Python コードを実行できます。
構文
以下は exec の構文です:
exec(object[, globals[, locals]])
パラメータ
- object:必須パラメータで、指定する必要がある Python コードを示します。これは文字列または code オブジェクトでなければなりません。object が文字列の場合、その文字列はまず一連の Python 文として解析されてから実行されます(構文エラーが発生しない限り)。object が code オブジェクトである場合は、単に実行されるだけです。
- globals:オプションパラメータで、グローバル名前空間(グローバル変数を格納)を表します。提供される場合は、辞書オブジェクトでなければなりません。
- locals:オプションパラメータで、現在のローカル名前空間(ローカル変数を格納)を表します。提供される場合は、任意のマッピングオブジェクトにすることができます。このパラメータが省略された場合、globals と同じ値になります。
戻り値
exec の戻り値は常に None です。
例
以下に exec を使用する例を示します:
例1
>>>exec('print("Hello World")')
Hello World
# 単一行ステートメント文字列
>>> exec("print ('example.com')")
サンプル.com
# 複数行ステートメント文字列
>>> exec ("""for i in range(5):
... print ("iter time: %d" % i)
... """)
iter time: 0
iter time: 1
iter time: 2
iter time: 3
iter time: 4
例2
x = 10
expr = """
z = 30
sum = x + y + z
print(sum)
"""
def func():
y = 20
exec(expr)
exec(expr, {'x': 1, 'y': 2})
exec(expr, {'x': 1, 'y': 2}, {'y': 3, 'z': 4})
func()
出力結果:
60 33 34
exec の戻り値
Python では、exec関数は文字列内のコードを実行するために使用されますが、戻り値を返しません。実行したコードの戻り値を取得したい場合は、使用できます。eval関数またはexec組み合わせてlocals() 或 globals()変数の値を取得します。
注意してください。使用するevalとexecには注意が必要です。特に、実行されるコードが信頼できないソースからのものである場合、セキュリティ上のリスクが存在する可能性があります。
使用してeval戻り値を取得:
例
code = '2 + 2'
result = eval(code)
print(result)
result = eval(code)
print(result)
この例では、eval文字列を実行し'2 + 2'結果を返します。4。
上記のコードを実行した出力結果は次のとおりです:
4
を使用しexecと組み合わせてlocals()戻り値を取得:
例
code = 'result = 2 + 2'
local_vars = {}
exec(code, globals(), local_vars)
result = local_vars['result']
print(result)
local_vars = {}
exec(code, globals(), local_vars)
result = local_vars['result']
print(result)
この例では、exec文字列を実行し'result = 2 + 2'、結果をlocal_vars辞書の'result'キーに格納します。
上記のコードを実行した出力結果は次のとおりです:
4
を使用しexecと組み合わせてglobals()戻り値を取得:
例
code = 'result = 2 + 2'
global_vars = {}
exec(code, global_vars)
result = global_vars['result']
print(result)
global_vars = {}
exec(code, global_vars)
result = global_vars['result']
print(result)
この例では、exec文字列を実行し'result = 2 + 2'、結果をglobal_vars辞書の'result'キーに格納します。
上記のコードを実行した出力結果は次のとおりです:
4その他の拡張
Python3 組み込み関数