zoukankan      html  css  js  c++  java
  • Python这个缩进让我焦头烂额!最奇葩的缩进...

     
     

    例如如下程序。

     
     

    运行上面代码,如果输入年龄小于20,将会看到如下运行结果。

     
     

    从上面代码可以看出,如果输入的年龄大于20,则程序会执行整体缩进的代码块。

    再次重复:Python不是格式自由的语言,因此你不能随心所欲地缩进,必须按Python语法要求缩进。下面详细介绍在缩进过程中可能导致的错误。

    不要忘记缩进

    代码块一定要缩进,否则就不是代码块。例如如下程序。

     
     

    上面程序的if条件与下面的print语句位于同一条竖线上,这样在if条件下就没有受控制的代码块了。因此,上面程序执行时会报出如下错误。

     
     

     

    注意:if条件后的条件执行体一定要缩进。只有缩进后的代码才能算条件执行体。

    接下来读者会产生一个疑问:代码块(条件执行体)到底要缩进多少呢?这个随意。你可以缩进1个空格、2个空格、3个空格……或1个Tab位,这都是符合语法要求的。但从编程习惯来看,Python通常建议缩进4个空格。

    有些时候,Python解释器不会报错,但并不代表程序没有错误。例如如下代码

     
     

    解释执行上面程序,程序不会报任何错误。但如果输入一个小于20的年龄,则可看到如下运行过程。

     
     

    从运行过程可以看出,我们输入的年龄明明小于20,但运行结果还是会打印“20岁以上……”。这是为什么呢?就是因为这条print语句没有缩进。如果这行代码不缩进,那么Python就不会把这行代码当成条件执行体,它就不受if条件的控制,因此无论用户输入什么年龄,print语句总会执行。

    如果忘记正确地缩进,很可能导致程序的运行结果超出我们的预期。例如如下程序。

     
     

    面代码中以粗体字标识的代码行:print("b不大于4")总会执行,因为这行代码没有缩进,因此它就不属于else后的条件执行体,else后的条件执行体只有b - =1这一行代码。

    如果要让print("b不大于4")语句也处于else控制之下,则需要让这行代码也缩进4个空格。

    if、else、elif后的条件执行体必须使用相同缩进的代码块,将这个代码块整体作为条件执行体。当if后有多条语句作为条件执行体时,如果忘记了缩进某一行代码,则会引起语法错误。看下面代码(程序清单同上)。

     
     

    在上面代码中,因为if后的条件执行体的最后一条语句没有缩进,所以系统只把c - = 1一行代码作为条件执行体,当c -= 1语句执行结束后,if语句也就执行结束了。后面的print("c大于4")已经是一行普通代码,不再属于条件执行体,从而导致else语句没有if语句,引发编译错误。在学习中有迷茫不知如何学习的朋友小编推荐一个学Python的学习q u n 227  -435-  450可以来了解一起进步一起学习!免费分享视频资料

    运行上面代码,将看到如下错误。

     
     

    为了改正上面的代码,需要让print("c大于4")也缩进4个空格。

    不要随意缩进

    需要说明的是,虽然Python语法允许代码块随意缩进N个空格,但同一个代码块内的代码必须保持相同的缩进,不能一会缩进2个空格,一会缩进4个空格。

    例如如下代码。

     
     

    上面程序中第二条print语句缩进了5个空格,在这样的情况下,Python解释器认为这条语句与前一条语句(缩进了4个空格)不是同一个代码块(这就是游标卡尺笑话的由来),因此Python解释器会报错。运行上面代码,将会报出如下错误。

     
     

    把代码改为如下形式。

     
     

    上面程序中第二条print语句只缩进了3个空格,它与前一条print语句(缩进了4个空格)同样不属于同一个代码块,因此Python解释器还是会报错。运行上面代码,则会报出如下错误。

     
     

    通过上面介绍可以看出,Python代码块中的所有语句必须保持相同的缩进,既不能多,也不能少。

    注意:位于同一个代码块中的所有语句必须保持相同的缩进,既不能多,也不能少。

    另外,需要说明的是,对于不需要使用代码块的地方,千万不要随意缩进,否则程序也会报错。例如如下简单的程序。

     
     

    上面程序只有两条简单的执行语句,并没有包括分支、循环等流程控制,因此不应该使用缩进。解释执行上面代码,将会看到如下错误。

     

      



    来源:https://www.jianshu.com/p/253fcbfc0fde

  • 相关阅读:
    菜鸟合作伙伴日志接入规范之C#实现
    使用JS在textarea在光标处插入内容
    ASP.NET MVC API 接口验证
    CSS3 grayscale滤镜+SVG使图片变黑白实例页面
    .NET MVC 获取 当前请求的 控制器/视图/区域 的名字
    asp.net 后台获取flv视频地址进行播放【转】
    实现输出h264直播流的rtmp服务器 flash直播服务器【转】
    如何实现一个c/s模式的flv视频点播系统
    视频流服务器配置[windows平台][转]
    小计
  • 原文地址:https://www.cnblogs.com/Frank-dev-blog/p/10777566.html
Copyright © 2011-2022 走看看