On Sat, May 01, 2021 at 03:05:51AM -0000, Valentin Berlier wrote:

> It's kind of weird that people seem to be missing the point about 
> this. Python already has comprehensions for all the iterable builtins 
> except strings.

No it doesn't.

I count 15 builtin iterables, only three have comprehensions.


> The argument that we can already do this with the "".join() 
> idiom is backwards. It's something we have to do _because_ there's no 
> way to write a string comprehensions directly. Comprehensions express 
> intent.

Okay. What string comprehension do I write to express my intent to write 
a string containing words separated by commas?

What string comprehension do I write to express my intent to write a 
string containing lines separated by newlines?

What string comprehension do I write to express my intent to write a 
string containing substrings separated by ' - ' (space, hyphen, space)?

`str.join` can express the intent of every single one of those, as well 
as the intent to write a string containing substrings separated by the 
empty string.


> Joining a generator expression with an empty string doesn't 
> convey the intent that you're building a string where each character 
> is derived from another iterable.

Of course it does. What else could `''.join(expression)` mean, if not to 
build a string with the substrings derived from expression separated by 
the empty string?


> Also I haven't seen anyone acknowledge the potential performance 
> benefits of string comprehensions. The "".join() idiom needs to go 
> through the entire generator machinery to assemble the final string, 
> whereas a decent implementation of string comprehensions would enable 
> some pretty significant optimizations.

Do you know what's worse than premature optimization? Accepting a new 
special-case language feature on the basis that, maybe some day, it 
might possibly enable a premature optimization.

If you're going to claim a micro-optimization benefit, I think you need 
more than just to hand-wave that "a decent implementation" would allow 
it. Let's start with the simplest case:

    c'substring for substring in expression'

What optimizations are available for that?


-- 
Steve
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/4LX5OHCTPVBACLFTXVSXCGRCAZZA6VWR/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to