内容概要
- 异常捕获补充
- for循环本质和迭代器总结
- 生成器
- 基于生成器实现range方法
- 生成器表达式
- 生成器笔试题
- 关键字yield补充用法
- 常见内置函数
异常捕获补充
try:
name
except NameError as e:
print('名字类型错误')
else:
print('嘿嘿嘿')
finally:
print('啦啦啦')
![image]()
![image]()
断言
q = 'index'
assert isinstance(q, str)
主动报异常
raise 错误类型
for循环本质
q = [11, 22, 33]
res = iter(q) # StopIteration 停止迭代
while True:
try:
print(next(res))
except StopIteration as e:
break
![image]()
迭代取值与索引取值对比
迭代取值
优点:不依赖索引的一种通用方式
缺点:取值的顺序永远是从左往右,无法重复取值
索引取值
优点:可以重复取值
缺点:需要提供有序容器类型才可以取值(不是一种通用的方式)
生成器对象
生成器其实就是自定义迭代器
def rain():
print('index')
yield 111
print('brand')
yield 222
rain()
![image]()
当函数体内含有关键字yield,在第一次调用函数的时候并不会执行函数体代码,而是将函数变成了生成器
res = rain()
res1 = next(res) # 每执行一个__next__代码往下运行到yield停止,返回后面的数据
print(res1)
res1 = next(res) # 再次执行__next__代码接着上次停止的地方接着往下,遇到yield停止
print(res1)
![image]()
自定义range功能
def it_range(start, stop=None, step=1):
if not stop:
stop = start
start = 0
while start < stop:
yield start
start += step
for i in it_range(1, 10, 2):
print(i)
![image]()
yield传值
def rain(name):
print('%s雨中' % name)
while True:
run = yield
print('%s正在雨中%s' % (name, run))
res = rain('sss')
next(res)
res.send('漫步')
res.send('狂奔')
![image]()
yield与return对比
yield
1.可以返回值(支持多个并且组织成元组)
2.函数体代码遇到yield不会结束而是停住
3.yield可以将函数变成生成器,还支持外界传值
return
1.可以返回值(支持多个并且组织成元组)
2.函数体代码遇到return直接结束
生成器表达式
res = [11, 22, 33]
res1 = (i + 1 for i in res)
print(next(res1))
print(next(res1))
print(next(res1)
生成器表达式内部的代码只有在迭代取值的时候才会执行
迭代器对象,生成器对象,我们可以看成是工厂。只有当我们所要数据的时候工厂才会加工出数据,上述方式就是为了节省空间
生成器笔试题
def rain(s, a):
return s + a
def brand():
for i in range(4):
yield i
g = brand()
for s in [1, 10]:
g = (rain(s, i) for i in g)
res = list(g)
print(res)
![image]()
常见内置函数
1.abs() # 绝对值
2.all() # 所有的元素都是True结果才是True
3.any() # 所有元素只要有一个是True结果就是True
4.bin() # 进制数
5.oct() # 进制数
6.hex() # 进制数
7.bytes() # 转码
8.str() # 转码
9.callable() # 判断函数是否可调用(能不能加括号)
10.chr() # 根据ASCII码数字找字符
11.ord() # 根据数字找ASCII码
12.complex() # 复数
13.dir() # 查看当前对象可以调用的名字
14.divmod() # 传入一个被除数和除数,返回一个由商和余数组成的元组
15.eval() # 识别简单的语法
16.exec() # 识别复杂语法
17.isinstance() # 判断是否属于某个数据类型
18.pow() # 次方
19.round() # 四舍五入
20.sum() # 求和
![image]()