生成器,迭代器
1.生成器(generator)
一边循环一边计算的机制,称为生成器
1.1 列表生成器
只要把一个列表生成式的[]改成()
列表生成器
可以通过next()这个函数获得生成器的下一个返回值
next()
当计算到最后一个元素的时候,再继续next()的话就会抛出StopIteration异常
1.2创建生成器的方法2(yield)
在使用next()调用函数的时候,函数每次遇到yield都会中断,返回中断的值,当下次再被调用的时候会从上次打断的地方继续执行。用for循环调用generator的时候拿不到return语句返回的值,如果想要拿到返回值,必须捕获StopIteration错误。
1.3 send
send
send传的参数传给了上图中的temp(temp只是个变量名,可以是其他的),通过send传的参数可以做一些判断,从而实现多任务
1.4总结
生成器的特点:节约资源,迭代到下一次的调用时,所使用的参数都是第一次所保留的,也就是说,在整个函数中调用的参数都是第一次调用时保留的,而不是新创建的。
2.迭代器
2.1 可迭代对象
可以直接作用于for循环的对象统称为可迭代对象:iterable(list,tuple,dict,set,str,generator)
2.2 判断是否可以迭代
可以使用isinstance()判断 eg isinstance('abc',Iterable)
2.3 迭代器
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
可以使用isinstance()判断一个对象是否是Iterator对象(方法如上)
2.4 iter()
可以通过iter()把可迭代但不是迭代器的对象变成迭代器
2.5总结
(1)凡是可作用于 for循环的对象都是可迭代对象
(2)凡是可作用于next()的都是迭代器
(3)集合数据类型是可迭代对象但不是迭代器,可以通过iter()变成迭代器
(4) 目的是在使用集合的时候减少占用的内存