1. はじめに—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/reference/introduction
移動先:案内検索

1.1。 序章

このリファレンスマニュアルでは、Pythonプログラミング言語について説明しています。 チュートリアルを目的としたものではありません。

できるだけ正確にしようとしていますが、構文と字句解析を除くすべてに、正式な仕様ではなく英語を使用することにしました。 これにより、ドキュメントは平均的な読者にとってより理解しやすくなりますが、あいまいさの余地が残ります。 したがって、火星から来て、このドキュメントだけからPythonを再実装しようとすると、推測が必要になる可能性があり、実際にはまったく異なる言語を実装することになります。 一方、Pythonを使用していて、言語の特定の領域に関する正確なルールが何であるか疑問に思っている場合は、ここで間違いなくそれらを見つけることができるはずです。 言語のより正式な定義を見たい場合は、ボランティアで時間を割くか、クローン作成機を発明することができます:-)。

言語参照ドキュメントに実装の詳細を追加しすぎると危険です。実装が変更されたり、同じ言語の他の実装が異なる動作をしたりする可能性があります。 一方、CPythonは広く使用されているPython実装の1つであり(代替実装は引き続きサポートされていますが)、特に実装に追加の制限が課せられている場合は、その特定の癖について言及する価値があります。 したがって、テキスト全体に短い「実装メモ」が散らばっています。

すべてのPython実装には、多数の組み込みモジュールと標準モジュールが付属しています。 これらは Python標準ライブラリに文書化されています。 いくつかの組み込みモジュールは、言語定義と重要な方法で相互作用するときに言及されます。

1.1。 代替実装

群を抜いて最も人気のあるPython実装が1つありますが、さまざまな対象者にとって特に興味深いいくつかの代替実装があります。

既知の実装は次のとおりです。

CPython
これは、Cで記述された、Pythonの元の最も保守された実装です。 通常、新しい言語機能が最初にここに表示されます。
Jython
Javaで実装されたPython。 この実装は、Javaアプリケーションのスクリプト言語として使用することも、Javaクラスライブラリを使用してアプリケーションを作成するために使用することもできます。 また、Javaライブラリのテストを作成するためにもよく使用されます。 詳細については、 JythonのWebサイトを参照してください。
Python for .NET
この実装は実際にはCPython実装を使用しますが、マネージド.NETアプリケーションであり、.NETライブラリを利用できるようにします。 ブライアンロイドによって作成されました。 詳細については、 Python for.NETホームページを参照してください。
IronPython
.NET用の代替Python。 Python.NETとは異なり、これはILを生成し、Pythonコードを.NETアセンブリに直接コンパイルする完全なPython実装です。 これは、Jythonの最初の作成者であるJimHuguninによって作成されました。 詳細については、 IronPythonWebサイトを参照してください。
PyPy
完全にPythonで記述されたPythonの実装。 スタックレスサポートやジャストインタイムコンパイラなど、他の実装にはないいくつかの高度な機能をサポートします。 プロジェクトの目標の1つは、インタープリターの変更を容易にすることで、言語自体の実験を促進することです(Pythonで記述されているため)。 追加情報は、 PyPyプロジェクトのホームページで入手できます。

これらの実装はそれぞれ、このマニュアルに記載されている言語とは多少異なります。または、標準のPythonドキュメントで説明されている以外の特定の情報を紹介します。 使用している特定の実装について他に何を知る必要があるかを判断するには、実装固有のドキュメントを参照してください。


1.2。 表記

字句解析と構文の説明では、変更されたBNF文法表記を使用します。 これは、次の定義スタイルを使用します。

 名前      ::=  lc_letter (lc_letter | "_")*
  lc_letter ::=  "a"..."z"

最初の行は、namelc_letterであり、その後に0個以上のlc_letterとアンダースコアのシーケンスが続くことを示しています。 lc_letterは、'a'から'z'までの任意の1文字です。 (このルールは、このドキュメントの字句および文法ルールで定義されている名前に実際に準拠しています。)

各ルールは、名前(ルールで定義されている名前)と::=で始まります。 縦棒(|)は、選択肢を区切るために使用されます。 これは、この表記法で最も拘束力の少ない演算子です。 スター(*)は、前の項目の0回以上の繰り返しを意味します。 同様に、プラス(+)は1回以上の繰り返しを意味し、角括弧([ ])で囲まれたフレーズは0回または1回の出現を意味します(つまり、囲まれたフレーズはオプションです)。 *および+演算子は、可能な限り緊密に結合します。 括弧はグループ化に使用されます。 リテラル文字列は引用符で囲まれています。 空白は、トークンを区切る場合にのみ意味があります。 通常、ルールは1行に含まれています。 多くの選択肢があるルールは、最初に縦棒で始まった後の各行で交互にフォーマットできます。

字句定義(上記の例のように)では、さらに2つの規則が使用されます。3つのドットで区切られた2つのリテラル文字は、指定された(包括的)範囲のASCII文字内の任意の1文字を選択することを意味します。 山かっこ(<...>)の間のフレーズは、定義された記号の非公式な説明を示します。 たとえば、これは、必要に応じて「制御文字」の概念を説明するために使用できます。

使用される表記法はほぼ同じですが、字句定義と構文定義の意味には大きな違いがあります。字句定義は入力ソースの個々の文字で動作し、構文定義はによって生成されたトークンのストリームで動作します。字句解析。 次の章(「字句解析」)でのBNFの使用はすべて、字句定義です。 以降の章での使用は構文上の定義です。