文章主要记录了条件和循环中的一些自己忽视的知识点,和一些自己在应用过程中出现的错误,系统的对这部分知识进行梳理与补充
else语句
Python的缩进使用强制使代码正确对齐,让程序员决定else属于哪一个if,所以在Python中出现'悬挂else'的情况是不会出现的
'''即使没有else与最近的if配对,程序依然正确运行,通过强制对齐,else正确的与外层的if配对'''
if a>0:
if b>0:
pass
else:
pass
while-else语句
'''只要while循环正常结束,而不是被break打断,else子句就会执行'''
while x>0:
if y>0:
break
pass
else:
pass
for-else语句
同while-else
条件表达式(三元操作符)
X if C else Y
对应C的三元操作符
C? X:Y
x=1
y=5
r=x if x>y else y
print r
>>5
for语句
用于序列类型
序列的三种基本迭代方法
通过序列项迭代
'''性能好,速度快'''
for eachName in nameList:
pass
通过序列索引迭代
'''接近C的使用方式'''
for nameIndex in range(len(nameList)):
pass
使用项和索引迭代
'''两全其美的方法,既获得了索引,也获得了序列元素'''
for i,eachLee in enumerate(nameList):
pass
用于迭代器类型
迭代器并不代表循环条目的集合。使用迭代器做for循环的代码与使用序列条目几乎完全相同
range()内建函数
range(start,end,step=1)
range(start,end)
range(end)
xrange()内建函数
与序列相关的内建函数
sorted()
reversed()
enumerate()
zip()
迭代器和iter()函数
迭代器规则
迭代的意思是重复做一些事很多次,就像在循环中做的那样,只要该对象实现了iter方法,就能进行迭代。该方法会返回一个迭代器(iterator),所谓的迭代器就是具有next方法的对象。在调用next()方法时,迭代器会返回它的下一个值。如果迭代器没有值可以返回,就会引发一个StopIteration异常,这并不代表错误发生,只是告诉外部调用者,迭代完成。
使用迭代器
序列
'''对一个对象调用iter()就可以得到它的迭代器,调用迭代器的next()方法可以获得它的下个项
reversed()内建函数返回一个反序访问的迭代器
enumerate()内建函数返回一个具有索引和元素的迭代器'''
i=iter([1,2,3])
i.next()
r=reversed([1,2,3])
r.next()
e=enumerate([1,2,3])
e.next()
字典
字典的迭代器会遍历它的键,语句for eachKey in myDict.keys()可缩写为for eachKey in myDict
文件
文件对象生成的迭代器会自动调用readline()方法,语句for eachLine in myFile.readline() 可缩写为 for eachLine in myFile