On 12/11/2018 6:48 AM, E. Madison Bray wrote:
The idea would be to now enhance the existing built-ins to restore at least some previously lost assumptions, at least in the relevant cases. To give an analogy, Python 3.0 replaced range() with (effectively) xrange(). This broken a lot of assumptions that the object returned by range(N) would work much like a list,
A range represents an arithmetic sequence. Any usage of range that could be replaced by xrange, which is nearly all uses, made no assumption broken by xrange. The basic assumption was and is that a range/xrange could be repeatedly iterated. That this assumption was met in the first case by returning a list was somewhat of an implementation detail. In terms of mutability, a tuple would be have been better, as range objects should not be mutable. (If [2,4,6] is mutated to [2,3,7], it is no longer a range (arithmetic sequence).
and Python 3.2 restored some of that list-like functionality
As I see it, xranges were unfinished as sequence objects and 3.2 finished the job. This included having the min() and max() builtins calculate the min and max efficiently, as a human would, as the first or last of the sequence, rather than uselessly iterating and comparing all the items in the sequence.
A proper analogy to range would be a re-iterable mapview (or 'mapseq) like what Steven D'Aprano proposes.
** I have a separate complaint that there's no great way, at the Python level, to define a class that is explicitly a "sequence" as opposed to a more general "mapping",
You mean like this? >>> from collections.abc import Sequence as S >>> isinstance((), S) True >>> isinstance([], S) True >>> isinstance(range(5), S) True >>> isinstance({}, S) False >>> isinstance(set(), S) False >>> class NItems(S): def __init__(self, n, item): self.len = n self.item = item def __getitem__(self, i): # missing index check return self.item def __len__(self): >>> isinstance(NItems(2, 3), S) True -- Terry Jan Reedy _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/