为什么python使用缩进定义条件语句的块?

为什么python使用缩进定义条件语句的块?,python,Python,我是python新手,我知道Java、C、PHP。Java、C、PHP使用{和}来定义条件语句的块,但是Python使用缩进而不是这些括号来定义条件语句的块。 为什么python使用缩进而不是括号,使用缩进而不是括号的优点是什么 例如: Python if() line 1 line 2 line 3 Java、C、PHP if() { line 1; line 2; line 3; } 所以我这里的观点是,如果一个程序有很多嵌套条件,那么缩进

我是python新手,我知道Java、C、PHP。Java、C、PHP使用
{
}
来定义条件语句的块,但是
Python
使用缩进而不是这些括号来定义条件语句的块。 为什么python使用缩进而不是括号,使用缩进而不是括号的优点是什么

例如:

Python

if()
    line 1
    line 2
    line 3
Java、C、PHP

if()
{
    line 1;
    line 2;
    line 3;
}

所以我这里的观点是,如果一个程序有很多嵌套条件,那么缩进会变得太大,如果换行是打开的,程序看起来会非常缓慢,如果它是关闭的,那么你必须使用滚动条来读取整行内容

提供有关代码块结构的视觉提示并提高可读性


最严厉者所说的在保持清晰的同时减少代码行数。

它或多或少是硬连接到lexer中的-在
之后的任何内容都被视为块语句,如果之后有新行,那么必须至少缩进一个空格

提供了Python的正式样式指南。简而言之,缩进使代码更具可读性

还提供了对此的一些见解:

连续行的缩进级别用于生成 使用堆栈缩进和删除标记,如下所示

在读取文件的第一行之前,将按下一个零 堆栈;这件事再也不会发生了。数字还在继续 堆栈将始终严格地从下到上递增。在 在每个逻辑行的开头,行的缩进级别为 与堆栈顶部相比。如果它相等,什么也不会发生。如果 它更大,它被推到堆栈上,一个缩进标记被删除 生成。如果它较小,则它必须是出现的数字之一 在堆栈上;堆栈上所有较大的数字都会弹出, 对于每个弹出的数字,都会生成一个DEDENT令牌。最后 对于该文件,将为其上剩余的每个数字生成一个DEDENT令牌 大于零的堆栈

sinepython使用堆栈来保证特定块的缩进级别是一致的,没有缩进将破坏lexer,并导致Python代码不被解释

lexer的灵活性也允许这样做(但不要这样做,否则Python程序员会一直看不起你):

def foo(n):
对于范围(0,10)内的i:
打印i,i+1
i=0
当我<10时:
打印i
打印i-1
打印i+1

哦,如果你有太多嵌套语句-也许你应该考虑重构你的代码以更清楚地阅读,并减少代码复杂度。

为了使一段代码(任何计算机语言)可读的人使用约定。 我认识的所有开发人员都对条件代码使用缩进,而不仅仅是在Python中 而且在C、C++、java、… 代码更具可读性,如果你有很多缩进,那么代码中可能有一些奇怪的东西

<>无论如何,在C、C++、java、…您需要括号(因为语法)


Python在这方面很好:因为几乎所有的程序员都缩进,所以不需要加括号:缩进是语法的一部分<强壮>聪明
此外,不能使用错误的缩进约定,因为缩进是语法的一部分<太棒了
无论如何,缩进都是您应该做的事情。如果你没有缩进你的C/Java/C++/C#,你就做错了

既然你无论如何都要做缩进,那么输入那些愚蠢的大括号有什么意义呢

此外,如果缩进变得如此之深以至于成为一个问题,那么您的代码模块化得不好。您应该使用多个较小的代码单元,而不是一个较大的代码单元


另请参见:

实例代码的可读性顺便说一句,它不仅适用于条件句,还适用于任何block.lisp对立面-
(if(>a5)(progn(setqa(+b7))(setqb(+c8)))(setqb4))
这可能是@最苛刻答案中的注释。
def foo(n):
 for i in range(0, 10):
     print i, i+1

 i = 0
 while i < 10:
              print i
              print i - 1
              print i + 1