天天看点

《Python数据科学指南》——1.9 生成一个迭代器和生成器

本节书摘来自异步社区《python数据科学指南》一书中的第1章,第1.9节,作者[印度] gopi subramanian ,方延风 刘丹 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

上一节,我们了解了什么是迭代器,这一节我们来讨论如何生成一个迭代器。

生成器提供了清晰的语法,能够依次访问一个序列,并不需要使用__iter__和next()这两个函数。我们也不用写一个类了。请注意,生成器和可迭代这两者才能制造一个迭代器。

如果你理解了前面小节里的推导,我们下面的示例你也能明白,在这个示例中,我们有一个生成器推导。回忆一下,我们曾经用下面的方式来进行一个元组推导,并得到了一个生成器对象。

很明显,上面的代码片段将算出给定范围的数的平方和,本例中的范围是从1到9(python的range函数是右侧结束),使用生成器,我们创建了一个名为simplecounter的迭代器,我们用它在for循环中循序访问那些潜在的数据。请注意我们现在没有使用iter()函数,代码十分清晰,我们成功地用一种优雅的方式重建了我们的旧simplecounter类。

让我们看看如何使用yield语句来创建一个生成器。

在上面的代码中,my_gen()函数就是一个生成器,我们使用yield语句来返回一个序列输出。

在前面的小节中,我们提到过生成器和可迭代两者才能制造一个迭代器,下面我们通过使用iter函数调用生成器来验证一下。

在我们进入下一节“使用可迭代对象”之前,强调一下使用生成器的注意事项,当我们完成对序列的访问时,就该立刻结束,不要再试图获取更多的数据。

使用生成器对象时,我们只能访问序列一次。