Pythonのドキュメントではよく次のような表記が用いられます。
print_stmt ::= "print" ([expression ("," expression)* [","]] | ">>" expression [("," expression)+ [","]])
Pythonを始めたときに、これに困惑しました。とくに「::=」は検索してもまったくヒットしないし理解するのに時間がかかりましたが、Windows版のオンラインヘルプの1.2 NotationにこれがBNF表記であることが書いてありました。仕様を正しく理解するために、BNF表記に関する最低限の理解が必要になります。 BNFでは「::=」記号の左側にある<symbol>がどのようなものであるか、「::=」記号の右側(<expression with symbols>)で説明します。
<symbol> ::= <expression with symbols>本来のBNFでは<と>でシンボルやその説明を囲むようですが、一般に用いられるBNFはそれほど厳密ではなく細かい仕様は異なっていることも多いようです。 PythonのドキュメントにおけるBFN表記もおなじで、シンボルやその説明は<と>で囲まれません。次の例は、aがbであることを意味します。
a ::= b
「::=」記号の右側は「|」で区切って複数の要素を指定することもできます。次の例では、aは小文字のaまたは大文字のAであることを意味します。
a ::= 'a' | 'A'
以下はPythonのドキュメントでよく用いられるようなBNF表記です。
name ::= lc_letter (lc_letter | "_")* lc_letter ::= "a"..."z"
最初の行はシンボルnameがlc_letterで始まり、その後にゼロ回以上のlc_letterの繰り返し。またはアンダースコアが続くことを意味します。
「*」は直前の項目のゼロ回以上の繰り返しを意味します。この場合は(lc_letter | "_")のゼロ回以上の繰り返しを意味しています。 この例にはありませんが「+」は直前の項目の1回以上の繰り返しを意味します。「[」と「]」で囲まれた部分は省略可能であることを意味します。二つの文字の間に「...」を置くと、二つの文字の間に1文字を選ぶことができることを意味します。上記の例の2行目では"a"から"z"の間に1文字(つまりアルファベットの小文字1文字)を意味します。「<」と「>」の間はコントロール文字の表記など、シンボルに関する非公式の情報を説明します。
Pythonでは「#」以降がコメントとして扱われます。
「組み込み型」とは、Pythonのインタプリタに標準で組み込まれているデータ型です。Pythonには以下のような組み込み型が用意されています。ブール値はデータ型ではなく定数オブジェクトTrueとFalseまたは、数値処理のコンテキストによって決定されます。そのため、ブール型は組み込み型とは別に説明します。
ブール値は真偽値を表現するために用いられます。ブール型は組み込み型ではなく定数オブジェクトTrueとFalseまたは、数値処理のコンテキストによって決定されます。TrueとFalseは数値処理のコンテキストで使うこともできます。この場合、Trueは1、Falseは0とみなされます。
Pythonでは、ifやwhile文の条件式や、ブール演算を行うときに、True, Falseオブジェクトだけでなく、すべてのオブジェクトはブール値として評価することができます。評価には以下の規則が適応されます。
偽とみなされるケース | False |
None | |
数値型のゼロ | |
空のシーケンス型 | |
空のマッピング型 | |
__nonzero__メソッドや__len__メソッドが定義されているクラスで、メソッドがゼロやFalseを返す場合 | |
真とみなされるケース | 上記以外すべてのケース |
いくつかのオブジェクト型は実装に依存して特別なリードオンリの属性を追加されます。これらの属性のいくつかはdir組み込み関数で報告されません。
以下は、このインスタンスの属するクラスを意味します。
instance.__class__
Pythonのブール演算には or, and, not演算子を使います。
x or y
上記の例では、xとyの論理和を返します。
x and y
上記の例では、xとyの論理積を返します。
not x
上記の例では、xの論理反転を返します。
それぞれの演算子の優先順位は、or, and, notの順に高くなります。
Pythonの比較演算子はC/C++等の他の言語の比較演算子に良く似ていますが。isやis notのような比較演算子もあります。
比較演算子 | 使用例 | 説明 |
---|---|---|
< | x < y | xはyより小さい |
<= | x <= y | xはy以下 |
> | x > y | xはyより大きい |
>= | x >= y | xはy以上 |
== | x >= y | xはy以上 |
!= | - | - |
is | - | 同じオブジェクト |
is not | - | 同じオブジェクトではない |
!=を<>と書いてもエラーとなりませんが、この書き方は推奨されません。
単純文(simple statement)は1つの論理行(対話シェルやスクリプトファイルの一行を意味すると思います)に置くことのできる文です。 1つの論理行の中には、複数の単純文をセミコロンで区切って置くことができます。
a = 1; b = 2; print (a + b)
Pythonには以下のような単純文があります。
expression_stmt |
assert_stmt |
assignment_stmt |
augmented_assignment_stmt |
pass_stmt |
del_stmt |
print文(print_stmt) |
return_stmt |
yield_stmt |
raise_stmt |
break_stmt |
continue_stmt |
import_stmt |
global_stmt |
exec_stmt |
print文はオブジェクトや式の結果を文字列に変換して標準出力、または指定されたファイルライクなオブジェクトに出力します。
print expression [ , expression]
expressionには出力するオブジェクトまたは式を置きます。expressionは「,」で区切って複数指定することができます。 複数の項目を指定した場合、それぞれの項目の間にはスペースが出力されます(ただし書き込みが行頭に対して行われる場合は、このスペースは出力されません)。通常は出力の最後に改行が加えられますが、引数の最後がカンマで終わる場合、改行は出力されません。
print 'a', 'b', print 'c'
上記のスクリプトの1行目のprintはカンマで終わっているため、改行は出力されず、以下のような出力が得られます。
a b c
出力は通常、標準出力に対して行われますが、これを別のファイルオブジェクト、またはファイルライクなオブジェクトに出力することもできます。この場合「>>」に続いてファイルオブジェクトを指定します。
print expression [ , expression ] >> fileObject