03.30 [Python基础语法]可迭代对象、迭代器和生成器

本篇文章将向大家介绍下可迭代对象、迭代器和生成器的相关概念。

可迭代对象(Iterable)

一个对象只要实现了__iter__()方法,这个对象就是可迭代的。

__iter__()方法返回一个迭代器。大部分容器类都实现了该方法。

建议使用系统内置函数iter()代替使用__iter__()方法。

[Python基础语法]可迭代对象、迭代器和生成器

判断对象是否是可迭代对象。

[Python基础语法]可迭代对象、迭代器和生成器

迭代器(Iterator)

迭代器对象本身需要支持以下两个方法:

  • __iter__()

返回迭代器对象本身。

  • __next__()

每调用一次他就会返回下一个元素,当没有下一个元素的时候返回一个StopIteration异常。

建议使用系统内置函数next(iterator)获取下一个元素。

[Python基础语法]可迭代对象、迭代器和生成器

判断是否是迭代器:

[Python基础语法]可迭代对象、迭代器和生成器

生成器(Generators)

生成器是构造迭代器的最简单有力的工具。主要提供了两种方式:

  • 生成器函数

和普通函数不同的是,返回一个值的时候使用yield来代替return。

当调用生成器函数时,每次执行到yield语句,生成器的状态将被冻结起来,并将结果返回__next__调用者。冻结意思是局部的状态都会被保存起来,包括局部变量绑定、指令指针。确保下一次调用时能从上一次的状态继续。

以生成斐波那契数列举例说明yield使用:

斐波那契(Fibonacci)数列是一个简单的递归数列,任意一个数都可以由前两个数相加得到。

[Python基础语法]可迭代对象、迭代器和生成器

[Python基础语法]可迭代对象、迭代器和生成器

生成器表达式

语法格式:(expression(iter_val) for iter_val in iterable if filter(iter_val)

[Python基础语法]可迭代对象、迭代器和生成器


分享到:


相關文章: