Advertisement
hxrussia

Iterable Int in Python

Jul 7th, 2014
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.08 KB | None | 0 0
  1. def modify_builtin_types(f, changes, recursive=True):
  2.     # Extract code
  3.     mod_code = f.__code__
  4.     mod_consts = list(mod_code.co_consts)
  5.  
  6.     # Modify code
  7.     for index, elem in enumerate(mod_consts):
  8.         try:
  9.             mod_consts[index] = changes[type(elem)](elem)
  10.         except KeyError:
  11.             pass
  12.  
  13.     # Create new code
  14.     f.__code__ = type(mod_code)(
  15.         mod_code.co_argcount, mod_code.co_nlocals,
  16.         mod_code.co_stacksize, mod_code.co_flags, mod_code.co_code,
  17.         tuple(mod_consts), mod_code.co_names, mod_code.co_varnames,
  18.         mod_code.co_filename, mod_code.co_name, mod_code.co_firstlineno,
  19.         mod_code.co_lnotab, mod_code.co_freevars, mod_code.co_cellvars,
  20.     )
  21.  
  22. class ImprovedInt(int):
  23.     current = 0
  24.    
  25.     def __iter__(self):
  26.         return self
  27.  
  28.     def next(self):
  29.         if self.current >= self:
  30.             raise StopIteration
  31.         else:
  32.             self.current += 1
  33.             return self.current - 1
  34.  
  35. def f():
  36.     for i in 10:
  37.         print i
  38.  
  39. modify_builtin_types(f, {int: ImprovedInt})
  40.  
  41. f()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement