Python関数 - コンパイル()

高洛峰
高洛峰オリジナル
2016-10-17 14:56:131395ブラウズ

compile(source, filename, mode[, flags[, dont_inherit]])

中国語の説明: ソースをコードまたは AST オブジェクトにコンパイルします。コード オブジェクトは、exec ステートメントを介して実行することも、eval() を使用して評価することもできます。

パラメータソース: 文字列またはAST (抽象構文ツリー) オブジェクト。

パラメータ filename: コード ファイル名。コードがファイルから読み込まれない場合は、識別可能な値を渡します。

パラメータモデル: コンパイルされたコードのタイプを指定します。 「exec」、「eval」、「single」として指定できます。

パラメータ flag と dont_inherit: これら 2 つのパラメータはまだ導入されておらず、オプションのパラメータです。


バージョン: python2.3, 2.6, 2.7, 3.2で異なります、python3と互換性がありますのでご注意ください


英語の説明:

ソースをコードまたはASTコードにコンパイルします。オブジェクトは exec ステートメントによって実行することも、eval() の呼び出しによって評価することもできます。ソースは文字列または AST オブジェクトのいずれかにすることができます。AST オブジェクトの操作方法については、ast モジュールのドキュメントを参照してください。

ファイル名引数コードが読み取られたファイルを指定する必要があります。ファイルから読み込まれなかった場合は、認識可能な値を渡します ('' が一般的に使用されます)。

モード引数は、コンパイルできるコードの種類を指定します。ソースが一連のステートメントで構成されている場合は 'exec'、単一の式で構成されている場合は 'eval'、単一の対話型ステートメントで構成されている場合は 'single' (後者の場合、None 以外に評価される式ステートメント)オプションの引数 flags と dont_inherit は、ソースのコンパイルに影響を与える将来のステートメント (PEP 236 を参照) を制御します。どちらも存在しない場合 (または両方がゼロの場合)、コードは有効な将来のステートメントでコンパイルされます。コンパイルを呼び出すコード内で flags 引数が指定され、dont_inherit が指定されていない (またはゼロである) 場合、dont_inherit が - でない場合に使用されるステートメントに加えて、flags 引数で指定された将来のステートメントが使用されます。整数が 0 の場合、フラグ引数はそれです – コンパイルの呼び出しの周囲で有効な将来のステートメントは無視されます。

将来のステートメントは、ビットごとに OR して複数のステートメントを指定できます。 __future__ モジュールの _Feature インスタンスの Compiler_flag 属性として見つかります。

この関数は、コンパイルされたソースが無効な場合は SyntaxError を発生させ、ソースに null バイトが含まれている場合は TypeError を発生させます。

注: 複数行のコードを含む文字列をコンパイルする場合は、 「single」または「eval」モードでは、入力は少なくとも 1 つの改行文字で終了する必要があります。これは、コード モジュール内の不完全なステートメントと完全なステートメントの検出を容易にするためです。

バージョン 2.3 での変更点: flags と dont_inherit 引数が追加されました。

バージョン 2.6 で変更: AST オブジェクトのコンパイルのサポート。

バージョン 2.7 で変更: Windows および Mac の改行の使用が許可されました。また、「exec」モードでの入力は改行で終わる必要がなくなりました。


コード例:

>>> code = "for i in range(0, 10): print i"
>>> cmpcode = compile(code, '', 'exec')
>>> exec cmpcode
0
1
2
3
4
5
6
7
8
9
>>> str = "3 * 4 + 5"
>>> a = compile(str,'','eval')
>>> eval(a)
17

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。