sitecustomize._vendor.importlib_metadata._itertools

Module Contents

Functions

unique_everseen(iterable[, key])

List unique elements, preserving order. Remember all elements ever seen.

always_iterable(obj[, base_type])

If obj is iterable, return an iterator over its items:

sitecustomize._vendor.importlib_metadata._itertools.unique_everseen(iterable, key=None)

List unique elements, preserving order. Remember all elements ever seen.

sitecustomize._vendor.importlib_metadata._itertools.always_iterable(obj, base_type=(str, bytes))

If obj is iterable, return an iterator over its items:

>>> obj = (1, 2, 3)
>>> list(always_iterable(obj))
[1, 2, 3]

If obj is not iterable, return a one-item iterable containing obj:

>>> obj = 1
>>> list(always_iterable(obj))
[1]

If obj is None, return an empty iterable:

>>> obj = None
>>> list(always_iterable(None))
[]

By default, binary and text strings are not considered iterable:

>>> obj = 'foo'
>>> list(always_iterable(obj))
['foo']

If base_type is set, objects for which isinstance(obj, base_type) returns True won’t be considered iterable.

>>> obj = {'a': 1}
>>> list(always_iterable(obj))  # Iterate over the dict's keys
['a']
>>> list(always_iterable(obj, base_type=dict))  # Treat dicts as a unit
[{'a': 1}]

Set base_type to None to avoid any special handling and treat objects Python considers iterable as iterable:

>>> obj = 'foo'
>>> list(always_iterable(obj, base_type=None))
['f', 'o', 'o']