本篇文章将向大家介绍下可迭代对象、迭代器和生成器的相关概念。
可迭代对象(Iterable)
一个对象只要实现了__iter__()方法,这个对象就是可迭代的。
__iter__()方法返回一个迭代器。大部分容器类都实现了该方法。
建议使用系统内置函数iter()代替使用__iter__()方法。
判断对象是否是可迭代对象。
迭代器(Iterator)
迭代器对象本身需要支持以下两个方法:
- __iter__()
返回迭代器对象本身。
- __next__()
每调用一次他就会返回下一个元素,当没有下一个元素的时候返回一个StopIteration异常。
建议使用系统内置函数next(iterator)获取下一个元素。
判断是否是迭代器:
生成器(Generators)
生成器是构造迭代器的最简单有力的工具。主要提供了两种方式:
- 生成器函数
和普通函数不同的是,返回一个值的时候使用yield来代替return。
当调用生成器函数时,每次执行到yield语句,生成器的状态将被冻结起来,并将结果返回__next__调用者。冻结意思是局部的状态都会被保存起来,包括局部变量绑定、指令指针。确保下一次调用时能从上一次的状态继续。
以生成斐波那契数列举例说明yield使用:
斐波那契(Fibonacci)数列是一个简单的递归数列,任意一个数都可以由前两个数相加得到。
生成器表达式
语法格式:(expression(iter_val) for iter_val in iterable if filter(iter_val)
閱讀更多 程序員x 的文章