Pythonの浅談exec()関数

2134 ワード

Pythonでは、exec()は非常に興味深い組み込み関数であり、eval()関数とは異なり数学式の結果を計算する機能しか実行できず、exec()は複雑なPythonコードを動的に実行でき、非常に強力である.詳細については、公式ドキュメントを参照してください.https://docs.python.org/3/library/functions.html#exec . 今回はexec()関数の使い方を簡単に話し、読者にヒントと参考を与えたいと思います.まず、コードは次のような簡単な例です.
i = 12
j = 13
exec("answer=i*j")
print("Answer is %s"%answer)

このコードの出力結果は次のとおりです.
Answer is 156
これは,3文目のexec()関数がPythonコードを正しく実行し,計算結果を本物のPythonコードのようにanswer変数に与えることができることを示している.では、exec()関数に複雑なPythonコードを実行させてもらえませんか.Why not?例を見てください.
func = "def fact(n):
\treturn 1 if n==1 else n*fact(n-1)" exec(func) a = fact(5) print(a)

funcは文字列で、整数乗算を再帰的に計算する関数です.exec()はstringとcode objectパラメータのみをサポートするため、この再帰関数を文字列に変換します.もちろん、フォーマットはPythonコードのフォーマットで、改行とインデントに注意してください.先の例の出力結果は次のとおりです.
120
これらのコードは直接Pythonで実行できるのではないでしょうか.なぜ文字列に書いてexec()で実行するのでしょうか.筆者の答えは,さっきの例はexec()関数の基本的な使い方を示すためだけであり,その強さはそれだけではない. 実際のプロジェクトでは、Pythonコードをいくつかのファイルに書き込むことがあります.例を挙げると、以下のeg.txtのように、私たちが望んでいるPythonコードが格納されています.以下のようにします.
def fact(n):
    if n==1:
        return 1
    else:
        return n*fact(n-1)
t = fact(6)
print(t)

もう一度注意してください.これはtxt形式のPythonコードです.では、どうやって呼び出しますか?答えはexec()関数で、コードは次のとおりです.
with open('E://eg.txt', 'r') as f:
    s = f.read()

exec(s)

上記のコードでは、eg.txtファイルの内容を読み出してからexec()関数に渡して実行し、出力結果は以下の通りです.
720
ちょっと素敵ではないでしょうか.stringとcode objectを実行できるほか、exec()関数にパラメータを追加することもでき、パラメータの伝達は辞書(dict)形式に書くことができる.具体的な使い方は以下の例を参考にしてください.
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
expr文には、3つの変数x,y,zがあり、z値が与えられているので、exec()関数の外でx,yの値を指定したり、exec()関数でx,yの値を辞書で指定したりすることができます.最後の文では、x,y,zの値を与え、yの値が繰り返され、exec()関数は後のyの値を受信し、zの値が伝達されないため、出力結果は34である.今回の分かち合いはこれで終わります.本文はいくつかのexec()関数の使用例を紹介して、レンガを投げて玉を引くことができることを望んで、みんなも多く交流することを歓迎します~~