python如何知道该语句属于if-else的哪个分支?

时间:2013-08-30 08:01:28

标签: python python-3.x

今天我下载了一个python来做一些简单的测试,对我来说奇怪的是python的if-else语句没有括号。

那么如何证明一个语句属于哪个分支?在我的测试中,当我更改缩进时,结果是不同的。 (b = b * 2)这是否意味着python根据用户的编码风格确定语句?那么如果用户不遵循缩进规则呢?

a = 10
b = 20

i = 0

while i<5 :
   if (a < 9) :  
       if (a < 5) :
           b = b - 1
       else :
           b = b + 1
   b = b*2
   a = a - 1
   i = i + 1
   print (a, b, i)

a = 10
b = 20

i = 0

while i<5 :
   if (a < 9) :  
       if (a < 5) :
           b = b - 1
       else :
           b = b + 1
           b = b*2
   a = a - 1
   i = i + 1
   print (a, b, i)

3 个答案:

答案 0 :(得分:4)

  

那么如果用户不遵循缩进规则呢?

编码器必须遵循适当的缩进。唯一的另一个选择是代码无法正常工作(或偶然工作,但这本身并不是真正的选择)。

答案 1 :(得分:1)

缩进是Python语法的一部分。

丢弃缩进与丢弃C中的{ }没什么不同(即最终代码损坏或不正确)

为什么呢?这个问题在Design and History FAQ

中得到了解答
  

Guido van Rossum认为使用缩进进行分组是   非常优雅,为平均的清晰度做出了很大贡献   Python程序。一段时间后,大多数人都会学会喜欢这个功能。

     

由于没有开始/结束括号,因此不会产生分歧   在解析器和人类读者感知的分组之间。   偶尔C程序员会遇到像这样的代码片段   这样:

if (x <= y)
        x++;
        y--;
z++;
     

如果条件为真,则仅执行x ++语句,但是   缩进导致你不相信。即使是有经验的C.   程序员有时会长时间盯着它,想知道为什么是y   即使对于x>减少也是如此收率

     

因为没有开始/结束括号,所以Python不太容易发生   编码式冲突。在C中有许多不同的放置方式   大括号。如果您习惯于阅读和编写使用其中的代码   风格,你会在阅读时感到至少有点不安(或者是   需要写另一种风格。

     

许多编码样式将开始/结束括号放在一行上。   这使程序更长,浪费宝贵的屏幕   空间,使得更难以对程序进行良好的概述。理想的情况下,   一个功能应该适合一个屏幕(例如,20-30行)。 20行   Python可以比20行C做更多的工作。这不仅仅是   由于缺乏开头/结尾括号 - 缺乏声明和   高级数据类型也是负责任的 - 但是   基于缩进的语法肯定有帮助

此外,History of Python还有一个关于缩进语法

的起源的故事

答案 2 :(得分:0)

这就是为什么在if语句之后你放了一个冒号。在那之后,你做了我所谓的“缩进”,基本上你在下一行之后放置一个空格(或者你想要多少空格),然后在if语句中输入你想要运行的代码。如果你没有插入空格,那么python会出现错误,因为你添加了一个if语句,所以它希望你有一些缩进。 例如:

if 4<7:
 print("Hello")

此外,没有缩进规则。它可以是你想要的那么多行,但通常因为你希望你的代码可以被人类读取,所以我将缩进任何代码的最大空格是4.