day13 递归和迭代器
迭代器
不是函数只是一个称呼
可迭代对象是含有__iter__方法的为可迭代对象
**迭代器是含有__iter__ ,__next__方法的为迭代器**
除了数字类型,所有数据类型都是可迭代对象
for循环原理(for循环本质就是一个while循环,只不过是一个一定可控的while循环)
dic = {'a':1,'b':2,'c':3}
dic.__iter__.__next__ 迭代取值---》基于上一个值
dic_iter = dic.__iter__()
while Ture:
try:
print(dic.__iter__.__next__())
except StopIteration:
break
for循环原理
def for(iterable):
iterator = iterable.__iter__()
while Ture:
try:
print(iterator.__next__())
except StopIteration:
break
三元表达式
条件成立走这里 if 条件 else 条件不成立走这里
列表推导式
lt = [i**2 for i in range(10)]
字典生成式
dic = {i:i**2 for i in range(10)}
zip()
对可迭代对象逐个取值,不同可迭代对象同时提取出相同位置元素
生成器
generator 本质是一个迭代器
g = (i for i in range(10))
含有yield关键字的函数叫做生成器
def func():
yield 3 一个yield相当于一个next;暂停函数
yield 4
func() #得到一个生成器-----> 生成器本质就是迭代器
yield的特性
- 暂停函数
- 通过next取值
递归
函数a内部直接调用函数a本身
每一次递归,会不会结束函数?不会,并且每一次递归都会开辟内存空间,如果一直开辟内存就炸掉了,所以最多递归系统默认1000次
递归必须要有推出条件
递归
- 递归必须要调用自己
- 递归必须要有退出条件
- 递归必须要规律