
On Sun, 8 Dec 2019 at 18:42, Guido van Rossum <guido@python.org> wrote:
We're not changing next(). It's too fundamental to change even subtly.
I don't think that anyone has proposed to change the behaviour of next. I have suggested that if there is to be a new function very similar to next then it can also solve another problem with next which is the case where there should be no default and an empty iterator should raise (something other than StopIteration).
We might add itertools.first(), but not builtins.first(). This kind of functionality is not fundamental but it's easy to get slightly wrong (witness many hasty attempts in these threads).
itertools.first() should be implemented in C, but its semantics should be given by this (well, let me see if I can get it right):
def first(it, /, default=None): it = iter(it) try: return next(it) except StopIteration: return default
This version assumes a default default of None so it can't be used to raise on an empty iterable:
print(first([])) None
-- Oscar