4.1 if结构
下面我们来看一下可能是流程控制里最常用的结构(if):
elif是else if的缩写,这有助于避免过多的缩进。if...elif....elif...的功能和其他语言的switch或case的结构是一样的。当然elif和else都是选配项,就像买车的时候是否加bose音响一样~对了之所以我在powershell中用python3调用而不用python是因为我同时有两个版本的python,并且都添加了环境变量,所以将其中一个python.exe改名以便区分。
4.2 for结构
python中的for结构和C或者Pascal有些区别(其实是更方便一些,真心不是黑)。在C语言中都是按数字迭代,在python中的for不只可以用数字迭代,可以在任何有序列的结构中迭代(比如list和string)举个栗子:
如果你想在循环的同时修改列表本身,那你最好使用一个副本去循环,迭代一个列表并不会自动帮你生成副本哦~使用分片操作可以很方便的完成这个工作:
其实我在刚看到这个例子的时候也有点蒙圈,为啥words不行words[:]就可以了那?后来想了想原来words[:]虽然包含的元素和words是一样的,但他并不是words而是另一个sequence是words的副本,这样我们在使用words.insert的时候会改变words的内容,如果还在words里迭代的话可能出现死循环的情况,现在在words[:]里迭代就不会遇到这个问题,因为对words的修改并不会影响words[:]的内容。
4.3 range()函数
如果想像C语言那样(i = 0;i++;i<5),可以使用range()函数:
看上去像不像是range生成了一个链表?事实上如果你print一个range()函数你会发现一个奇怪的现象:range看上去确实像是返回一个list但事实他并不是这样做的,其实他返回的是一个对象,这个对象在迭代的时候会将我们想要的数字序列返回,所以用起来就像是一个list一样。亲们可能好奇为啥要搞得这么麻烦,其实很简单为了节省空间而已。。。我对面向对象的理解就是。。没啥理解感觉和封装起来的C没啥太大的区别(博客中的很多话都是我的歪理邪说,和原文作者没啥关系啊!比如这条就是~),那么我们怎么让这个实例变成一个list哪:
4.4 break、continue、else
break和在C中没啥区别就是跳出当前这一层循环,循环结构中可能有一个else选项,他会在全部遍历循环或者循环条件为假的时候执行(因为break而结束不在此列),我们来看个栗子:
在循环中使用else和在try中使用else是很像的,在try中没有异常时执行else,在循环中没有break执行else~
pass的话嘛,其实他啥也不干,就是有时候从语法上需要我们填点什么,但是我们并不希望任何事情被执行,这个时候就可以用pass了:或者是你有些功能已经想好了,但是还没时间去实现,那么可以先pass一下等过一会回来实现它~