[pyar] Longitud de un iterador

Ernesto Savoretti esavoretti en gmail.com
Sab Ene 15 04:37:46 ART 2011


El día 14 de enero de 2011 22:52, Alejandro Santos
<listas en alejolp.com> escribió:
> Lo bueno de Python es que podés tomar cada fuego artificial por
> separado, probarlo, y si anda, volver a tirarlo (??).
>
> No, en serio, si lo que buscás es un iterador como el de Java[0] que
> soporte la operación de it.hasNext() acá te dejo uno que hace lo mismo
> en Python:
>
>  https://gist.github.com/779899
>

Muy interesante. Al leer el código me surgió la duda de si funciona
también con generadores, y como soy muy vago para leer la doc, en este
caso la de __iter__(), me respondí con una pruebita:

Python 2.7.1 (r271:86832, Dec  2 2010, 03:01:28)
[GCC 4.5.1 20101125 (prerelease)] on linux2
Type "copyright", "credits" or "license()" for more information.
>>> class HasNextIter(object):
    def __init__(self, it):
        self.it = it.__iter__()
        self.data = None
        self.hn = None

    def __iter__(self):
        return self

    def _fetchOne(self):
        try:
            self.data = self.it.next()
            self.hn = True
        except StopIteration:
            self.hn = False

    def next(self):
        if self.hn is None:
            self._fecthOne()

        if self.hn is False:
            raise StopIteration()
        else:
            self.hn = None
            return self.data

    def hasNext(self):
        if self.hn is None:
            self._fetchOne()
        return bool(self.hn)


>>>  # testeando generadores
>>> def mygen(x):
	for i in xrange(x):
		yield i

		
>>> hni = HasNextIter(mygen(5))
>>> while hni.hasNext():
	print hni.next()

	
0
1
2
3
4
>>>

-- 

                                    Ernesto Savoretti



More information about the pyar mailing list