我知道分号在Python中是不必要的,但它们可以用来将多个语句塞到一行中,例如
>>> x = 42; y = 54
我一直以为分号就相当于换行符。所以我有点惊讶地得知(h/t Ned Batchelder on Twitter)双分号是语法错误:
>>> 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;;
不起作用;因为两个分号之间没有声明,因为“无”不是声明。如果它们之间有任何完整的语句,例如 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
打印(20);;打印(300)
Python 给出此代码的语法无效。
双分号在这里是一个错误,因为在Python中,当你在一行中写两行时,应该有一个分号而不是两个。因此,它有错误。