code: def is_iterable(value, generators_allowed=False):
      
      if generators_allowed:
          if not isinstance(value, string_types + (bytes,)) and hasattr(value, '__iter__'):
              return True
      else:
          if isinstance(value, (tuple, list, set)):
              return True
      return False
docs: Checks if value is a list-like object. Don't match generators and generator-like objects here by default, because
      callers don't necessarily guarantee that they only iterate the value once. Take care to not match string types and
      bytes.
  
      :param value: any type of object
      :param generators_allowed: if True, generators will be treated as iterable
      :return: True or False