zoukankan      html  css  js  c++  java
  • python 3 中建立可迭代对象(making object iterable)

    Python中的for语句用起来很爽,但是要求 in后面的对象iterable,python中的很多对象支持,如list, tuple, dict。

    如果要让自己的类对象也iterable怎么办,究竟如何才算iterable object呢?其实,自已也可以定义特殊的方法来使自定义类支持这种操作。

     第一种方法很简单,就是实现一个特殊函数__getitem__

    第二种方法,也是实现一个特殊函数__iter__,此函数要求返回一个iterator对象,对于iterator对象的要求就是实现特殊函数 __next__,所以一般的做法就是类同时实现__iter__和__next__,然后在__iter__中返回自己。__next__函数要求依次 返回需要迭代的项目,结束后raise StopIteration,说着很乱,直接上代码,更清晰:

    class MyIterator():
        def __init__(self,*items):
            self._items=list(items);
            self._index=-1;
    
        def __next__(self):
            self._index+=1;
            if self._index <len(self._items):
                return self._items[self._index];
            else:
                raise StopIteration;
    
        def __iter__(self):
            self._index=-1;
            return self;

    第二种方法应该是推荐的做法,不过python的版本不同,要求也不同,在python 3中必须是__next__,否则就报TypeError,在python2.6版本则必须实现next()方法; 为了兼容的话,可以同时定义一个next()方法:

        def next(self):
            return self.__next__();
  • 相关阅读:
    hdu 1240 Asteroids!
    hdu 1253 胜利大逃亡
    hdu 1035 Robot Motion
    hdu 1181 变形课
    hdu 1548 A strange lift
    DFS Sum It Up
    hdu 3278 Catch That Cow
    hdu 1312 Red and Black
    ACM菜鸟
    eclipse新建安卓项目点击finish后窗口无法关闭
  • 原文地址:https://www.cnblogs.com/dajianshi/p/2849672.html
Copyright © 2011-2022 走看看