python基础 -- 生成器迭代器
生成器
1 | ge = (i * i for i in range(1, 7)) |
- 之前讲过python有列表推导和生成器表达式,列表推导会把所有元素都生成放到列表中再进行遍历,而生成器表达式是在遍历的过程中对后续的元素进行生成(保存的不是对应的元素而是如何推算出元素的算法)
1 | def fib(n): |
- 生成器是是用yield进行实现的,和Java多线程中的yield完全不同,这里是每次迭代的时候会在yield处进行return,下次遍历从yield之后再次执行
迭代器
- 可以是用for-in语句的对象称为可迭代对象(Iterable),一个可迭代对象可以作为内置函数next()的实参进行惰性推算叫做迭代器对象(Iterator),列表、元组、字典等都不是迭代器对象
- 可以调用内置函数iter()把可迭代对象转换为迭代器对象
- 一个对象同时实现了__iter__()和__next(),这个对象也被称为迭代器对象,for-in语句会先调用__iter()()返回一个可迭代对象,然后不断调用__next()__()返回下一次迭代的值
