Generator
Iterable Objects
  1. #!/usr/bin/python
  2.  
  3. #list
  4. l = range(10);
  5. for i in l:
  6. print i;
  7.  
  8. #tuple
  9. t = (1, 2, 3, 4);
  10. for i in t:
  11. print i;
  12.  
  13. #dict
  14. d = {'x':1, 'y':2};
  15. for k in d:
  16. print k;
  17.  
  18. #string
  19. s = 'Hello World!';
  20. for i in s:
  21. print i;
Iterator
  1. #!/usr/bin/python
  2.  
  3. l = iter(range(10)); #iterator
  4.  
  5. try:
  6. while True:
  7. print l.next(); #if no more element, raise StopIteration
  8. except StopIteration:
  9. pass
Implement Iterator as Classes
  1. #!/usr/bin/python
  2.  
  3. class yrange:
  4. def __init__(self, n):
  5. self.i = 0
  6. self.n = n
  7.  
  8. def __iter__(self): # make an object iterable
  9. return self # return an iterator
  10.  
  11. def next(self):
  12. if self.i < self.n:
  13. i = self.i
  14. self.i += 1
  15. return i
  16. else:
  17. raise StopIteration()
  18.  
  19. y = yrange(10);
  20.  
  21. l = list(y); # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  22. print l;
  23. l = list(y); # []
  24. print l;
  1. #!/usr/bin/python
  2.  
  3.  
  4. class zrange:
  5. def __init__(self, n):
  6. self.n = n
  7.  
  8. def __iter__(self):
  9. return zrange_iter(self.n)
  10.  
  11. class zrange_iter:
  12. def __init__(self, n):
  13. self.i = 0
  14. self.n = n
  15.  
  16. def __iter__(self):
  17. # Iterators are iterables too.
  18. # Adding this functions to make them so.
  19. return self
  20.  
  21. def next(self):
  22. if self.i < self.n:
  23. i = self.i
  24. self.i += 1
  25. return i
  26. else:
  27. raise StopIteration()
  28.  
  29. l = zrange(10);
  30.  
  31. print list(l); # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  32. print list(l); # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Generator
  1. #!/usr/bin/python
  2.  
  3. def yrange(n):
  4. i = 0;
  5. while i < n:
  6. yield i;
  7. i += 1;
  8.  
  9. l = yrange(10);
  10. for i in l:
  11. print i;
  12.  
  13. for i in l: # do not print anything, l has been consumed
  14. print i;
Generator Expression
  1. #!/usr/bin/python
  2.  
  3. # list
  4. l = [x*x for x in range(4)]; # [0, 1, 4, 9]
  5. print l;
  6.  
  7. # generator
  8. g = (x*x for x in range(4));
  9. for i in g:
  10. print i;
Reference