我遇到了一段代码(简化了这个问题),结构如下:
while True:
if x == y: break到目前为止,我对Python的理解是,解释器高度依赖于制表符/空格来理解循环和条件等内容,但是上面的代码风格运行时没有问题,这表明这并不完全正确。
有人能解释一下细微差别吗?
发布于 2014-11-07 01:04:47
这里不需要缩进,因为您的simple_stmt,break,在if的suite中。
...
if_stmt ::= "if" expression ":" suite
("elif" expression ":" suite)*
["else" ":" suite]
...
suite ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT
statement ::= stmt_list NEWLINE | compound_stmt
...
stmt_list ::= simple_stmt (";" simple_stmt)* [";"]
...在这种情况下,不需要缩进。
您只能使用简单陈述 (如return或break )才能做到这一点,但您不可能在没有缩进的情况下拥有复合语句、if (如while )。
发布于 2014-11-07 00:56:52
在Python中,如果块仅由一条语句组成,则始终可以用一行替换预期的块。
例如。
def f(x): return x
def f(x):
return x是等价物。Python中的任何其他块期望语法也是如此:
发布于 2014-11-07 00:56:39
这就是状态和复合语句之间的区别。例如,在C中,您可能会执行以下操作
for(i=0; i<10; i++) printf("something");或
for(i=0; i<10; i++) {printf("something");}for循环只执行一条语句。但是,当在大括号中包含多个语句时,例如,
for(i=0; i<10; i++) {printf("something"); printf("something else");}然后,花括号内的整个东西就像一个语句一样。
Python也一样..。
if x == y:
print 'abcd' # These two statements are treated as 1 block
break # of statements 如果你只有一条语句,你就不需要定义一个块。
https://stackoverflow.com/questions/26792212
复制相似问题