評価、実行、コンパイル: 比較分析
機能の違い
Eval は単一の式を動的に評価し、結果を返します。
Exec は、指定されたコード ブロックを破棄し、主に副作用に使用される戻り値を破棄します。
コンパイルとモード
コンパイルは、eval と exec の両方で重要な役割を果たします。
-
'eval' モード: 単一の式を、評価された結果を返すバイトコードにコンパイルします。 value.
-
'exec' モード: 任意のタイプのコード フラグメントを、None を返すバイトコードにコンパイルします (Python 2 では、これはステートメントであり、何も返しませんでした)。
構文と違い
Python 2
- Exec はステートメントです。
- Eval は関数です。
- Exec は、長さ 2 または 3 のタプルを受け入れて、グローバルとローカルを定義します (下位互換性のためのハック)。
Python 3
- Exec は関数です。
- コード オブジェクトが渡されると、Exec と eval は同じように動作します。
詳細な比較
評価中式:
- Exec は式を直接受け入れません。
- Eval は単一の式のみを文字列またはコード オブジェクトとして受け入れます。
副作用:
- Exec が使用されます変数の変更や関数呼び出しなどの副作用のみを目的としています。
- Eval には副作用はなく、評価された式の値を返します。
ステートメントとコード ブロック:
- Exec は、ステートメント、ループ、およびimports.
- Eval はステートメントを直接処理できません。ステートメントにはコンパイルされたコード オブジェクトが必要です。
使用例
計算と印刷:
a = 5
result = eval('37 + a') # Eval calculates the expression and returns the result (42)
exec('print(37 + a)') # Exec executes the code (prints 42)
ログイン後にコピー
変数の変更:
a = 2
exec('a = 47') # Exec modifies the global variable `a`
result = eval('a = 47') # Eval throws an error because it cannot handle statements
ログイン後にコピー
以上がPython での評価、実行、コンパイル: 違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。