生成器,迭代器

2017-06-10  本文已影响0人  不浪漫的浪漫_ea03

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) 目的是在使用集合的时候减少占用的内存

上一篇下一篇

猜你喜欢

热点阅读