迭代器和生成器的那点事

迭代器从名字上看就应该很好懂。就是可以迭和代,哈哈!其实在python中只要是可以被for循环的就可以迭代。

1.要理解迭代器要先从迭代协议聊一聊,字符串,列表,元祖,字典,集合,都是可以被迭代的,可以使用dir()查看他们这些数据结构里都含有"__iter__"的内置方法的都是可迭代的对象。就必须要遵循可迭代的协议。

2.迭代器就是共同有__iter__方法和__next__方法。只有迭代器才能一个一个取值,取一个后再取下一个,但是内存地址使用同一个地址空间。这样更能大大节省内存。取了后面的就会删除前面的。

 

例子:

1 a = 'abcdefg'
2 ret = iter(a)
3 print(next(ret))
说明:a是一个字符串,因为含有__iter__方法,因此是一个可迭代的数据对象。将使用iter()方法生成一个迭代器,当采用next()方法后就可以一个一个取值了。
取值只能从前往后,不能回退,当取到最后一个后再取值就会抛出异常"StopIteration",停止迭代。可是前面说的可以被for的可以迭代,那么为什么for不会报错呢?for语法已经对抛出的异常做了处理,当遇到迭代停止就跳出循环。哈哈!恍然大悟!!!!有这么好用的for为啥还要有迭代器。其实秘密在于后面要讲到的生成器,这里就不剧透了。忍着好奇啊!!!!!!

 

posted @ 2020-08-20 01:17  伟仔技术博客  阅读(86)  评论(0)    收藏  举报