Description
There are situations where a variable can be either a list or a tuple (or more generally, a sequence), but it is used/unpacked in a tuple-like way. That is, the length is fixed and types are possibly heterogeneous. A practical example of this is mpi4py's buffer specifications.
I don't believe it's possible to express a fixed-length heterogeneous sequence without using Tuple
and forcing a specific type/inheritance. It'd be useful to have an abstract type that expresses tuple semantics without the inheritance bounds. So the analogy is roughly: List
is to Sequence
as Tuple
is to FixedSequence
(or whatever name we choose).
def foo(x: FixedSequence[int, str]) -> int:
return x[0]
foo((0, ''))
foo([0, ''])
Currently I think it's necessary to do Sequence[Union[int, str]]
and this loses both the fixed length and the ordering of the elements in the sequence.