首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python中的缩进并不总是必要的?

Python中的缩进并不总是必要的?
EN

Stack Overflow用户
提问于 2014-11-07 00:49:51
回答 3查看 681关注 0票数 2

我遇到了一段代码(简化了这个问题),结构如下:

代码语言:javascript
运行
复制
while True:
    if x == y: break

到目前为止,我对Python的理解是,解释器高度依赖于制表符/空格来理解循环和条件等内容,但是上面的代码风格运行时没有问题,这表明这并不完全正确。

有人能解释一下细微差别吗?

EN

回答 3

Stack Overflow用户

发布于 2014-11-07 01:04:47

这里不需要缩进,因为您的simple_stmtbreak,在ifsuite中。

代码语言:javascript
运行
复制
...
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)* [";"]
...

在这种情况下,不需要缩进。

您只能使用简单陈述 (如returnbreak )才能做到这一点,但您不可能在没有缩进的情况下拥有复合语句if (如while )。

票数 2
EN

Stack Overflow用户

发布于 2014-11-07 00:56:52

在Python中,如果块仅由一条语句组成,则始终可以用一行替换预期的块。

例如。

代码语言:javascript
运行
复制
def f(x): return x

def f(x):
    return x

是等价物。Python中的任何其他块期望语法也是如此:

  • 如果,否则,elif,for,while,def,class .
票数 1
EN

Stack Overflow用户

发布于 2014-11-07 00:56:39

这就是状态和复合语句之间的区别。例如,在C中,您可能会执行以下操作

代码语言:javascript
运行
复制
for(i=0; i<10; i++) printf("something");

代码语言:javascript
运行
复制
for(i=0; i<10; i++) {printf("something");}

for循环只执行一条语句。但是,当在大括号中包含多个语句时,例如,

代码语言:javascript
运行
复制
for(i=0; i<10; i++) {printf("something"); printf("something else");}

然后,花括号内的整个东西就像一个语句一样。

Python也一样..。

代码语言:javascript
运行
复制
if x == y: 
    print 'abcd'   # These two statements are treated as 1 block
    break          # of statements 

如果你只有一条语句,你就不需要定义一个块。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26792212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档