code: def is_iterable(obj):
      
      return isinstance(obj, (list, tuple, types.GeneratorType)) or \
          (not isinstance(obj, (int, str, dict)) and
           bool(getattr(obj, "next", False)))
docs: >>> is_iterable([])
      True
      >>> is_iterable(())
      True
      >>> is_iterable([x for x in range(10)])
      True
      >>> is_iterable((1, 2, 3))
      True
      >>> g = (x for x in range(10))
      >>> is_iterable(g)
      True
      >>> is_iterable("abc")
      False
      >>> is_iterable(0)
      False
      >>> is_iterable({})
      False