zoukankan      html  css  js  c++  java
  • 迭代器和生成器

    迭代器和和生成器都是容器对象。它们之间的关系是,生成器是一种特殊的迭代器。所以,先从迭代器入手。

    迭代器:

    python中,只要是实现了迭代协议的容器对象,都是迭代器。python的迭代器协议,基于两个方法:
    ·next() 返回下一个
    ·__iter__() 返回迭代器本身
     
    如下就是一个迭代器:
    python中的序列遍历完的时候抛出的StopIteration异常。而迭代器,迭代完成时也是抛出这个异常,这样迭代器和与循环式兼容的。都是捕捉到StopIteration异常来停止循环。
     
    生成迭代器对象的两种方法:
    1、使用iter()内置方法,使用该方法,可以将一个对象变为迭代器对象。
    2、在类中定义迭代器的两个方法,满足迭代器协议。则,该类的对象就是迭代器对象。
     1 class MyIteration(object):
     2     """docstring for MyIteration"""
     3     def __init__(self, setp):
     4         self.step = step
     5 
     6     def next(self):
     7 
     8         if self.step == 0 :
     9             raise StopIteration
    10         self.step -= 1
    11         return self.step
    12 
    13     def __iter__(self):
    14         return self

    生成器:

    生成器是一个特殊的迭代器,所以,也是有迭代器的特性。具有next()和__iter__()方法。不过,next()返回的是,yield指令放回的值。__iter__()方法,返回的是一个生产器对象。

    生成器的使用不是很常见,虽然可以大大的简化了代码,但是对于我们这种从C,Java这样语言入门学习的人,这样的特性让我们感觉在思考上很别扭。程序猿不习惯这样的思路,但是这的确是一个很好的特性。将来要多多使用它来重构我的代码。
    生成序列和循环执行的函数时,最好使用生成器。
    生成器的一个有别于迭代器的重要特性,就是提供了代码的交互式。使用的时send()方法:
    生成器还有一只简单的生成方式:

    与列表推导式极其相似,只是[]被换成了()。

    总结:

    迭代器和生成器是python的两个很独特的容器对象。凸显了python的一个思想:“代码足够简单,而不是数据”。python提倡的简洁代码形式,生成器和迭代器都可以简单的几行代码,而操作一个负载的数据结构。

    算法和数据的结构的实现,也应此变得简单。有空的话,我将用python来写写一些算法的实现。

  • 相关阅读:
    Linux 实战
    bash 环境配置及脚本
    Linux vi/vim
    Linux 正则表达式
    001 KNN分类 最邻近算法
    测序名解
    流式细胞术
    CircRNA 环化RNA
    笔记总结
    Flume
  • 原文地址:https://www.cnblogs.com/chengxuyuanxiaoye/p/3708628.html
Copyright © 2011-2022 走看看