(x)
return hasattr(x, "__iter__") and not isinstance(x, (str, bytes))
>>> is_listlike("foo")
    False
    >>> is_listlike(5)
    False
    >>> is_listlike(b"foo")
    False
    >>> is_listlike([b"foo"])
    True
    >>> is_listlike((b"foo",))
    True
    >>> is_listlike({})
    True
    >>> is_listlike(set())
    True
    >>> is_listlike((x for x in range(3)))
    True
    >>> is_listlike(range(5))
    True
>>> is_listlike("foo")
    False
    >>> is_listlike(5)
    False
    >>> is_listlike(b"foo")
    False
    >>> is_listlike([b"foo"])
    True
    >>> is_listlike((b"foo",))
    True
    >>> is_listlike({})
    True
    >>> is_listlike(set())
    True
    >>> is_listlike((x for x in range(3)))
    True
    >>> is_listlike(range(5))
    True
>>> is_listlike ( foo ) False >>> is_listlike ( 5 ) False >>> is_listlike ( b foo ) False >>> is_listlike ( [ b foo ] ) True >>> is_listlike (( b foo )) True >>> is_listlike ( {} ) True >>> is_listlike ( set () ) True >>> is_listlike (( x for x in range ( 3 ))) True >>> is_listlike ( range ( 5 )) True
def is_listlike(x):
    """
    >>> is_listlike("foo")
    False
    >>> is_listlike(5)
    False
    >>> is_listlike(b"foo")
    False
    >>> is_listlike([b"foo"])
    True
    >>> is_listlike((b"foo",))
    True
    >>> is_listlike({})
    True
    >>> is_listlike(set())
    True
    >>> is_listlike((x for x in range(3)))
    True
    >>> is_listlike(range(5))
    True
    """
    return hasattr(x, "__iter__") and not isinstance(x, (str, bytes))
def is_listlike ( x ) : return hasattr ( x , "__iter__" ) and not isinstance ( x , ( str , bytes ) )