Just a quick tip about the hardly known
slice objects in Python.
They are used to implement the slicing syntax for sequence types (lists,
s = "The quick brown fox jumps over the lazy dog" # s[4:9] is internally converted (and equivalent) to s[slice(4, 9)]. assert s[4:9] == s[slice(4, 9)] # 'Not present' is encoded as 'None' assert s[20:] == s[slice(20, None)]
slice object can be used in normal code too, for example for tracking
regions in strings: instead of having separate
variables (or writing a custom class/
namedtuple) simply roll
the indices into a
# A column-aligned table: table = ('REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE', '<none> <none> 0987654321AB 2 hours ago 385.8 MB', 'chris/web latest 0123456789AB 2 hours ago 385.8 MB', ) header, *entries = table # Compute the column slices by parsing the header. Gives a list of slices. slices = find_column_slices(header) for entry in entries: repo, tag, id, created, size = [entry[sl].strip() for sl in slices] ...
This is mostly useful when the indices are computed at runtime and applied to more than one string.
slice objects encapsulate regions of strings/lists/tuples,
and are an appropriate tool for simplifying code that operates on start/end
indices. They provide a clean abstraction, make the code more straight-forward
and save a bit of typing.