On Tue, Nov 21, 2017 at 12:27:32PM +0300, Kirill Balunov wrote: > Backward compatibility is an important issue, but at the same time it is > the main brake on progress.
"Progress just means bad things happen faster." -- Terry Pratchett, "Witches Abroad" [...] > And how do you look at something like this (deferred star evaluation)?: > > a, ?*b, c, d = something_iterable A waste of effort? How do you defer evaluating the second and subsequent items if you evaluate the final two? Given: def gen(): yield 999 for i in range(100): yield random.random() yield 999 yield 999 then a, ?*b, c, d = gen() has to evaluate all 100 random numbers in order to assign a, c, d all equal to 999. Making b an iterator instead of a list doesn't actually avoid evaluating anything, and it will still require as much storage as a list. The most likely implementation would: - store the evaluated items in a list; - assign iter(the list) as b. I suppose that there could be some way of delaying the calls to random.random() by returning a thunk, but that is likely to be more expensive in both memory and time than a simple list of floats. -- Steven _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/