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

时间:2013-11-23 19:16:37

标签: 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;
}

所以我的观点是,如果一个程序有很多嵌套条件,那么缩进会变得太大,如果换行是ON,程序看起来会非常蠕动,如果它是关闭的则你必须使用滚动吧,为了阅读整行...

5 个答案:

答案 0 :(得分:2)

压痕是你应该做的事情。如果你没有缩进你的C / Java / C ++ / C#,那你就做错了。

因此,无论如何你都要做缩进,输入所有那些愚蠢的花括号是什么意思?

此外,如果您的缩进变得如此之深以至于存在问题,那么您就不会很好地模仿您的代码。您应该使用多个较小的代码单元,而不是一个巨大的代码单元。

另请参阅:http://stromberg.dnsalias.org/~dstromberg/significant-whitespace.html

答案 1 :(得分:1)

它或多或少地硬连接到词法分析器 - :之后的任何内容都被视为块语句,如果之后有新行,则必须缩进至少有一个空间。

PEP 8提供了一些关于Python正式样式指南的清晰度。简而言之 - 缩进使代码更易读。

The lexical analysis page也提供了一些洞察力:

  

连续线的缩进级别用于生成   使用堆栈的INDENT和DEDENT令牌如下。

     

在读取文件的第一行之前,会按下一个零   堆栈;这永远不会再被弹出。数字继续推进   堆栈将始终从下到上严格增加。在   每个逻辑行的开头,该行的缩进级别为   与堆栈顶部相比。如果它是平等的,没有任何反应。如果   它更大,它被推入堆栈,一个INDENT令牌   产生。如果它更小,它必须是出现的数字之一   在堆栈上;弹出堆叠中所有较大的数字,   并且对于弹出的每个数字,生成DEDENT令牌。在末尾   对于该文件,为每个剩余的数字生成DEDENT令牌   堆栈大于零。

正弦Python使用堆栈来保证缩进级别对于特定块是一致的,没有缩进会破坏词法分析器,并导致Python代码不被解释。

词法分析器的灵活性允许对此做(但不要这样做,否则Python程序员会鄙视你直到天的结束):

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

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

答案 2 :(得分:0)

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

Why separate sections by indentation instead of brackets

答案 3 :(得分:0)

为了使一段代码(任何计算机语言)可读,人们使用约定。

我所知道的所有开发人员都使用缩进来处理条件代码,而不仅仅是Python 还有C,C ++,Java ...... 代码更具可读性,如果你得到很多缩进,可能代码中有一些奇怪的东西。

无论如何,在C,C ++,Java中......你需要括号(因为语法)。

Python非常棒:因为几乎所有编码器都缩进,不需要放置parenthesys:缩进是语法的一部分。 聪明!此外,您不能使用错误的缩进约定,因为缩进是语法的一部分。 大!

答案 4 :(得分:-1)

@theharshest在保持清晰度的同时说明了更少的代码行。