En muchos casos, tenemos la necesidad de acceder a un objeto como un iterador. Una forma es formar un bucle generador pero eso extiende la tarea y el tiempo que toma el programador. Python facilita esta tarea al proporcionar un método integrado __iter__() para esta tarea.
La función __iter__() devuelve un iterador para el objeto dado (array, conjunto, tupla, etc. u objetos personalizados). Crea un objeto al que se puede acceder un elemento a la vez usando la función __next__() , que generalmente es útil cuando se trata de bucles.
Sintaxis:
iter(object) iter(callable, sentinel)
- Objeto: el objeto cuyo iterador debe crearse. Puede ser un objeto de colección como una lista o tupla o un objeto definido por el usuario (usando OOPS).
- Callable, Sentinel: Callable representa un objeto que se puede llamar, y centinela es el valor en el que se necesita terminar la iteración, el valor de centinela representa el final de la secuencia que se itera.
Excepción :
If we call the iterator after all the elements have been iterated, then StopIterationError is raised.
La función __iter__() devuelve un objeto iterador que pasa por cada elemento del objeto dado. Se puede acceder al siguiente elemento a través de la función __next__(). En el caso de objeto invocable y valor centinela, la iteración se realiza hasta que se encuentra el valor o se alcanza el final de los elementos. En cualquier caso, el objeto original no se modifica.
Código #1:
Python3
# Python code demonstrating # basic use of iter() listA = ['a','e','i','o','u'] iter_listA = iter(listA) try: print( next(iter_listA)) print( next(iter_listA)) print( next(iter_listA)) print( next(iter_listA)) print( next(iter_listA)) print( next(iter_listA)) #StopIteration error except: pass
Producción :
a e i o u
Código #2:
Python3
# Python code demonstrating # basic use of iter() lst = [11, 22, 33, 44, 55] iter_lst = iter(lst) while True: try: print(iter_lst.__next__()) except: break
Producción :
11 22 33 44 55
Código #3:
Python3
# Python code demonstrating # basic use of iter() listB = ['Cat', 'Bat', 'Sat', 'Mat'] iter_listB = listB.__iter__() try: print(iter_listB.__next__()) print(iter_listB.__next__()) print(iter_listB.__next__()) print(iter_listB.__next__()) print(iter_listB.__next__()) #StopIteration error except: print(" \nThrowing 'StopIterationError'", "I cannot count more.")
Producción :
Cat Bat Sat Mat Throwing 'StopIterationError' I cannot count more.
Código #4: Objetos definidos por el usuario (usando OOPS)
Python3
# Python code showing use of iter() using OOPs class Counter: def __init__(self, start, end): self.num = start self.end = end def __iter__(self): return self def __next__(self): if self.num > self.end: raise StopIteration else: self.num += 1 return self.num - 1 # Driver code if __name__ == '__main__' : a, b = 2, 5 c1 = Counter(a, b) c2 = Counter(a, b) # Way 1-to print the range without iter() print ("Print the range without iter()") for i in c1: print ("Eating more Pizzas, counting ", i, end ="\n") print ("\nPrint the range using iter()\n") # Way 2- using iter() obj = iter(c2) try: while True: # Print till error raised print ("Eating more Pizzas, counting ", next(obj)) except: # when StopIteration raised, Print custom message print ("\nDead on overfood, GAME OVER")
Print the range without iter() Eating more Pizzas, counting 2 Eating more Pizzas, counting 3 Eating more Pizzas, counting 4 Eating more Pizzas, counting 5 Print the range using iter() Eating more Pizzas, counting 2 Eating more Pizzas, counting 3 Eating more Pizzas, counting 4 Eating more Pizzas, counting 5 Dead on overfood, GAME OVER
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA