前言
? ? ? ? 循环是编程中很重要的一项,在学习Python循环之前,要先弄明白缩进。本文主要使用for循环为例子,讲解物理行和代码行是什么,同时讲解缩进的规则。
一、for循环初体验
????????上一节讲到了,列表可以遍历,具体用法如下:
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
for day in week:
print(day)
? ? ? ? 这几条语句的输出如下:
????????这样就构成了一个简单的for循环,其运行方法如下:
????????用上述代码举例 。Python将首先读取其中的第一行代码:or day in week:
????????这行代码让Python获取列表week中的第一个值('Monday'),并将其赋值给变量day
????????接下来,Python读取下一行代码:print(day)
????????它让Python打印week的值——依然是'Monday'。
????????鉴于该列表还包含其他值,Python返回到循环的第一行: for day in week:
????????Python获取列表中的下一个名字——'Tuesday',并将其存储到变量day中。
????????再执行下面这行代码:print(day)
????????Python再次打印变量week的值——当前为'Tuesday'。
????????接下来,Python再次执行整个循环……以此类推,直到列表中再没有其他的元素的时候,Python就会跳出这个循环,接着执行程序的下一行代码。在这个示例中,for循环后面没有其他的代码,因此程序就此结束。?
????????
????????通过for循环,可对每个元素执行任何操作。下面来扩展前面的示例,对于每一天,都可以介绍今天是星期几,例如:
for day in week:
print('Today is', day+'.')
? ? ? ? 结果如下:
? ? ? ? 原理同上。在for循环中,想包含多少行代码都可以。实际上,你会发现使用for循环对每个元素执行众多不同的操作很有用。
二、一个神奇的现象
1.for怎么不循环了?
????????写如下代码:
for day in week:
print('此时循环还没结束呢!')
print(day)
print('当代码中的缩进取消时,意味着这一行不在for循环之中。')
print('所以从这一段开始,就不会再循环了!')
? ? ? ? 结果如下:
?????????欸!怎么最后两句话不循环了呀!为什么会这样呢?这时候就不得不讲讲Python的缩进功能了。可以看见,上面代码中的前两个print行于后两个print行有些小区别——前两行开头有一个长长的空格,后两行顶格写。
????????这个长长的空格就叫“缩进”。它其实不是简单的空格,而是四个空格组成的一种特殊格式。可以通过敲击空格键四次打出,也可以简单按一下“Tab”键完成缩进。
? ? ? ? 讲缩进,那就得先讲讲备用知识。
2.Python逻辑行与物理行
? ? ? ? Python存在两种”行“,分别是物理行和逻辑行。
????????物理行是你在编写程序时所看见的、写在一行内的。
????????逻辑行是在Python视野中,它能看见的一行语句。
?????????Python假定每个物理行对应一个逻辑行 。
? ? ? ? 比如上述:print(day)? ?就是一个物理行,它同样也是一个逻辑行。
????????如果你想要在一个物理行中使用多于一个逻辑行,那么你需要使用分号来特别地标明这种用法。分号表示一个逻辑行/语句的结束。例如:
for day in week:
? ? print('此时循环还没结束呢!')
? ? print(day)
它包含了三个物理行和三个逻辑行。同时也可以写作:
for day in week:
? ? print('此时循环还没结束呢!') ;print(day)
它包含了两个物理行和三个逻辑行。甚至也可以写作:
for day in week:print('此时循环还没结束呢!');print(day)
这一段代码只有一个物理行,却有三个逻辑行。
在python代码中:
1、使用分号(;)可以将两个或多个逻辑行合并成一个物理行; 2、使用反斜杠(\)可以讲多个物理行合并成一个逻辑行; 3、字典、列表等变量赋值语句,可以直接写成多个物理行。
? ? ? ? 一般而言,为了方便读写,在每个物理行只写一句逻辑行。仅仅当逻辑行太长的时候,可以在多于一个物理行写一个逻辑行,以避免使用分号,从而让代码更加易读。
3.缩进规则
????????1、逻辑行的“首行”需要顶格,不缩进;
????????2、相同逻辑层保持相同的缩进;
????????3、用冒号(:)标记一个新的逻辑层,如果要进入下一个逻辑层,需要增加缩进;如果要返回上一个,则要把缩进还原。
基于这个规则,看看上面那个代码吧!
for day in week:
print('此时循环还没结束呢!')
print(day)
print('当代码中的缩进取消时,意味着这一行不在for循环之中。')
print('所以从这一段开始,就不会再循环了!')
? ? ? ? 这一段代码有5个物理行。
? ? ? ? 首先物理行的第一行,因为是逻辑行的首行,表明要开启for循环,所以for顶格不用缩进。
? ? ? ? 然后因为要循环的内容(两个print语句)和for后面的语句(day in week),属于不同的逻辑层(理解为干不同的事情),所以需要用冒号标记新的逻辑层。同时,由于进入了新的代码层,需要缩进。
? ? ? ? 第二个物理行,是要循环打印一行汉字。同时第三个物理行也是要循环打印列表的内容。所以属于同一个逻辑层,故而保持相同的缩进。
? ? ? ? 第四第五个物理行,只要求打印两行汉字,不需要循环。所以不属于“循环的那个逻辑层”,也即需要返回上一个逻辑层,所以把缩进还原。
? ? ? ? 用人话总结就是——for循环,首先for顶格,然后需要循环的内容都要缩进。在for缩进之内的都归for管。不想循环的内容(想跳出循环),就要把缩进还原。
????????
总结
? ? ? ? 以上便是Python缩进的规则。同时在使用循环中,会有五种非常严重的错误。
????????1、忘记缩进;就是忘记了循环的内容需要缩进。
????????2、忘记缩进额外的代码行;即忘记了循环之内其他语句的缩进。
????????3、忘记不缩进(进行了没必要的缩进);即本该顶格写的东西,突然加上缩进,这样会引起报错“IndentationError: unexpected indent ”
????????4、不想循环却缩进;即不想循环的内容,如果加上了缩进,就会被纳入循环。
????????5、漏掉冒号;就是忘了告诉Python要进入下一个逻辑层了,它就会错乱(报错)“SyntaxError: invalid syntax”
????????
? ? ? ? 这五种错误,本质上还是没有理解缩进的正确用法。所谓是熟能生巧,在编写大长段代码的时候,一个缩进的错误,可能会让结果天差地别!
|