【Python】Python ~ 基本編 / eval, exec ~

■ はじめに

文字列をスクリプトとして実行する eval, exec について扱う
どちらも組み込み関数に分類されるメソッド。

https://docs.python.org/ja/3.6/library/functions.html
個人的な感想

コードが追いづらくなるから、
無暗には使わないでほしい、、、

目次

【1】 eval
【2】 exec
【3】globals() / locals()

【1】 eval

https://docs.python.org/ja/3.6/library/functions.html#eval

eval(expression, globals=None, locals=None)

第1引数 expression : 式として評価
第2引数 globals : グローバルな名前空間を指定
第3引数 locals : ローカルな名前空間を指定

サンプル

例1:Hello world!

print(eval('1 + 2')) # 3

例2:関数を文字列から呼び出す

def say_hello(name):
  return "Hello, {}!!".format(name)

name = 'Mike'
print(eval("say_hello")(name)) # Hello, Mike!!

【2】 exec

https://docs.python.org/ja/3.6/library/functions.html#exec

exec(object[, globals[, locals]])

第1引数 expression : 文として実行
第2引数 globals : グローバルな名前空間を指定
第3引数 locals : ローカルな名前空間を指定

サンプル

hello = """
hello = 'Hello World!'
print(hello)
"""

exec(hello) # Hello World!

【3】globals() / locals()

* 以下の関連記事を参照のこと

https://dk521123.hatenablog.com/entry/2022/07/11/161815

参考文献

https://qiita.com/Kodaira_/items/30c84806b61792b613f2
https://qiita.com/kyoshidajp/items/57ae371b3f5d8a84fb13
eval で 関数を文字列から動的に呼び出す
https://qiita.com/Chanmoro/items/9b0105e4c18bb76ed4e9

関連記事

Python ~ 基本編 / 文字列 ~
https://dk521123.hatenablog.com/entry/2019/10/12/075251
Python ~ globals() / locals() ~
https://dk521123.hatenablog.com/entry/2022/07/11/161815