[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