Syntax

slice(expr, from, to)

Extracts a substring, or sublist (based on the type of the result of the expression under expr with starting index of from, and ending at to if provided, or the end, if omitted. Can use negative indices to indicate counting form the back of the list, so -1 <=> length(_).

Special case is made for iterators (range, rect etc), which does require non-negative indices (negative from is treated as 0, and negative to as inf), but allows retrieving parts of the sequence and ignore other parts. In that case consecutive calls to slice will refer to index 0 the current iteration position since iterators cannot go back nor track where they are in the sequence (see examples).

slice([0,1,2,3,4,5], 1, 3)  => [1, 2]
slice('foobar', 0, 1)  => 'f'
slice('foobar', 3)  => 'bar'
slice(range(10), 3, 5)  => [3, 4]
slice(range(10), 5)  => [5, 6, 7, 8, 9]
r = range(100); [slice(r, 5, 7), slice(r, 1, 3)]  => [[5, 6], [8, 9]]