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/