“迭代”是程序设计中的一个非常重要概念,它可以简单地理解为“重复地做一些事情”。Python提供了迭代器和生成器的功能,但这些概念不易掌握。这篇文章主要是总结下我个人的一些理解。不对之处,恳请各位批评指正。下面所有代码的运行环境为Python 3.6.8。
一. 迭代的必要性
Python程序设计中,我们为什么要学习迭代?首先,采用迭代可以方便地遍历集合类对象(list、tuple、range、set、dict等)。其次,迭代采用延迟计算,可以降低存储空间的要求。
Python的循环只有while 和 for...in...两种结构。通过for......in结构可以方便地遍历集合类对象中的所有元素。如下所示
Python中的for...in...结构中必须包含可迭代对象,其运行机制稍后会讲到。
下面再看一个比较极端一点的例子,假如说,我程序中需要用到0~100000000的平方。直观的方案是分别计算这100000000个数的平方并按序存储在一个列表中。毫无疑问,这会造成巨大的内存开销。另一种方案是采用生成器,延迟计算。也就是说,我们并不提前计算和保存每个数的平方,而只是保存生成下一个数平方的算法。只有真正用到时,我们才调用算法进行计算。这种方案显著降低了内存开销。如下图所示: