code: def flatten(x):
      
  
      for el in x:
          if hasattr(el, "__iter__") and not isinstance(el, (binary, unicode)):
              for els in flatten(el):
                  yield els
          else:
              yield el
docs: flatten(sequence) -> list
  
      Returns a single, flat list which contains all elements retrieved
      from the sequence and all recursively contained sub-sequences
      (iterables).
  
      Examples:
      >>> [1, 2, [3,4], (5,6)]
      [1, 2, [3, 4], (5, 6)]
      >>> flatten([[[1,2,3], (42,None)], [4,5], [6], 7, MyVector(8,9,10)])
      [1, 2, 3, 42, None, 4, 5, 6, 7, 8, 9, 10]