What is Iterator in Python:
As a python guy aware of it already right! Not like that let see what’s happening.
Directly or indirectly u already used iterators in your day by day programming confusing!!!
We are using for loop right !!, for internally calling iter object only.
As usual need definition.
According to Wikipedia, an iterator is an object which allows a programmer to traverse through all the elements of a collection, regardless of its specific implementation.
In Python programming language, an iterator is an object which implements the iterator protocol. The iterator protocol consists of two methods. The
__iter__() method, which must return the iterator object and the
next() method, which returns the next element from a sequence.
Python has several built-in objects, which implement the iterator protocol. For example lists, tuples, strings, dictionaries or files.
str = "formidable" for i in str: print i, print it = iter(str) print it.next() print it.next() print it.next() print list(it) In the code example, we show a built-in iterator on a string. In Python a string is an immutable sequence of characters. The
iter()function returns an iterator on object. We can also use the
tuple()functions on iterators. O/P
f o r m i d a b l e f o r ['m', 'i', 'd', 'a', 'b', 'l', 'e']
Iterators have several advantages:
- Cleaner code
- Iterators can work with infinite sequences
- Iterators save resources
By saving system resources we mean that when working with iterators, we can get the next element in a sequence without keeping the entire dataset in memory.
Sample file opening code
#!/usr/bin/python # wantme2.py f = open('ifyouwantme', 'r') for line in f: print line, f.close() Implement Our own Iterator Object class seq14: def __init__(self): self.x = 0 def next(self): self.x += 1 if self.x > 14: raise StopIteration return self.x**self.x def __iter__(self): return self s = seq14() for i in s: print i The
StopIterationexception will cease the for loop.
In general, a generator is a special routine that can be used to control the iteration behaviour of a loop. A generator is similar to a function returning an array. A generator has parameters, it can be called and it generates a sequence of numbers. But unlike functions, which return a whole array, a generator yields one value at a time. This requires less memory. (Wikipedia)
Generators in Python:
- Are defined with the def keyword
- Use the yield keyword
- May use several yield keywords
- Return an iterator
def gen(): x, y = 1, 2 yield x, y x += 1 yield x, y it = gen() print it.next() print it.next() try: print it.next() except StopIteration: print "Iteration finished" Explanation: As we can see, a generator is defined with a
defkeyword, just like normal functions. We use two
yieldkeywords inside the body of a generator. Now it is important to understand, how actually the yield keyword works. It exits the generator and returns a value. Next time the
next()function of an iterator is called, we continue on the line following the yield keyword. Note that the local variables are preserved throughout the iterations. When there is nothing left to yield, a
StopIterationexception is raised. One More Example: import time import sys def fib(): a, b = 0, 1 while True: yield b a, b = b, a + b iter = fib() try: for i in iter: print i, time.sleep(1) sys.stdout.flush() except KeyboardInterrupt: print "Calculation stopped" Note : From Python3 onwards everything is related iterator and generator only i.e every object return iterator or generator as a result. Referrer link : http://zetcode.com/lang/python/itergener/