Pythonではセミコロンは不要ですが、複数のステートメントを1行に詰め込むために使用できます。
>>> x = 42; y = 54
セミコロンは改行と同等だといつも思っていました。だから、ダブルセミコロンがSyntaxErrorであることを知って少し驚いた(h/t TwitterのNed Batchelder ):
>>> x = 42
>>> x = 42;
>>> x = 42;;
File "<stdin>", line 1
x = 42;;
^
SyntaxError: invalid syntax
最後のプログラムはx = 42\n\n
。セミコロンの間の文は、空行、無操作として扱われたと思っていたでしょう。どうやら。
なぜこれがエラーなのですか?
Python文法から、;
は\n
として定義されていないことがわかります。パーサーは、;
の後に別のステートメントが必要です。その後の改行:
Semicolon w/ statement Maybe a semicolon Newline
\/ \/ \/ \/
simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE
x=42;;
が機能しないのはそのためです。 「何もない」はステートメントではないため、2つのセミコロンの間にステートメントがないためです。 pass
や0
のように、それらの間に完全なステートメントがある場合、コードは機能します。
x = 42;0; # Fine
x = 42;pass; # Fine
x = 42;; # Syntax error
if x == 42:; print("Yes") # Syntax error - "if x == 42:" isn't a complete statement
空のステートメントには、セミコロンがあってもpass
が必要です。
>>> x = 42;pass;
>>> x
42