第8章条件和循环
8.1if语句
多重条件表达式,and , or , not
elif:
三元操作符:
smaller = x if x < y else y
符合条件,返回前面的;否则,返回后面的
def getMin(num1 , num2):
smaller = num1 if num1 < num2
else num2
return smaller
8.5 while语句
8.6 for语句
通过序列想迭代
for name in names:
…
通过索引迭代
for i in range(len(names)):
8.6.3用于迭代器类型
迭代器对象有next()方法,返回下一条目
迭代完成用StopIteration除法异常
range(end)
range(start ,end)
与序列相关的内建函数
sorted() , reversed() , enumerate() , zip()
8.9 pass语句
pass不做任何事情,用于标记以后将要完成的代码
8.11 迭代器和iter()函数
迭代器是数据结构,可以迭代至最后一个元素
迭代器作用:迭代醒呢个提升,可扩展
迭代方法:next()获取对象,全部获取会引发StopIteration异常
迭代器去诶an:不能回到开始,不能复制迭代器
#迭代器
def iterTest():
nums = range(1,11)
it = iter(nums)
while True:
try:
value = it.__next__() #注意这里不是next()
print(value)
except StopIteration:
break
文件的迭代:
调用readline()方法就是迭代
myfile = open(‘data.txt’)
for eachline in myFile:
prnt(eachline)
8.11.5可变对象和迭代器
迭代时如果改变元素(删除),是不会执行的
创建迭代器
iter(obj)
iter(func , sentinel): sentinel:哨兵
实现了__iter__()和next()方法的类可以作为迭代器使用
传递两个参数,会重复调用func,直到下一个值为sentinel
8.12列表解析
列表解析:可以只使用一句话进行操作
语法: [expr for iter_var initerable]
[x ** 2 for x in range(6)]
filter(func , seq):
def filterTest():
nums = range(1,11)
results = filter(lambda
x : x % 2 , nums)
print(results)
#三行5列矩阵,矩阵迭代,前面是元素(x,y)后面先是行循环,然后是列循环
def matrixIter():
nums = [(x+1 , y+1)
for x in
range(3)
for y in
range(5)]
print(nums)
8.13生成器表达式
生成器表达式是列表解析的扩展
生成器含义:是一个函数,允许返回值,暂停代码的执行,之后恢复
生成器实现原理:生成器每次计算出一个条目后,把条目通过yield产生出来,生成器采用延迟计算,省内存
列表解析缺点:需要生成所有数据,大数据性能不好
列表解析是方括号,生成器是圆括号
[expr for iter_val in iterable ifcond_expr]
(expr for iter_val in iterable ifcond_expr)
计算非空字符总和
sum(len(word) for line in data for word inline.split() )
寻找最长文件
max( len(x.strip()) for x in open(‘/etc/motd’))