It's not that tricky to have the lstrip/rstrip behaviour with a join: def space_join(*args): first, *middle, last = args return ' '.join((first.rstrip(), *(s.strip() for s in middle), last.lstrip()))
What is harder is to be sure that this would be the expected behaviour when using a `&` operator on strings. Why `' a' & 'b'` would produce `'a b'` and `' ' & 'b'` produce `' b'` for example? Le sam. 11 mars 2023 à 10:04, Rob Cliffe via Python-ideas < python-ideas@python.org> a écrit : > > > On 07/03/2023 09:54, Valentin Berlier wrote: > > I'm -1 on this. You can easily make a helper that achieves the desired > syntax. Presenting "human readable data" isn't just about collapsing > spaces, and having your own helper means that you can adjust the formatting > to your specific use case if needed (for example with a different > separator). > > > > from typing import Self > > > > class StripJoin: > > def __init__(self, value: str = "") -> None: > > self.value = value > > def __and__(self, other: str) -> Self: > > other = other.strip() > > separator = bool(self.value and other) * " " > > return StripJoin(f"{self.value}{separator}{other}") > > def __str__(self) -> str: > > return self.value > > > > j = StripJoin() > > print(j & " foo " & " bar " & " something ") > > # Output: "foo bar something" > > > > The example above is more efficient than a possible implementation > directly on the str builtin as it doesn't strip the left side over and > over. However it still incurs repeated allocations and encourages a pattern > that performs badly in loops. With a lot of input you should probably > accumulate the stripped strings in a list and join them all at once. > As Steven d'Aprano pointed out re a similar suggestion, this is not the > same as my proposal, where > " foo " & " bar " & " something " > would evaluated to > " foo bar something " > Far from stripping the left side over and over, it doesn't strip it at > all! (Or the right side.) > This is trickier to write using join. And if the first or last string > can be blank, or all whitespace, it is trickier still. > As it is so easy to get these things wrong, perhaps having it built in > is not such a terrible idea?😁 > Best wishes > Rob Cliffe > > > > In any case I recommend reaching out for a library like Rich ( > https://github.com/Textualize/rich) if you care about formatting the > output of your program nicely. > > _______________________________________________ > > 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/A7RPR3FSBXEMRYAUXJVYYROCHVHL7DVP/ > > Code of Conduct: http://python.org/psf/codeofconduct/ > > _______________________________________________ > 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/J356SW4PG3KUDYFBLXAWDS723VCV3EVE/ > Code of Conduct: http://python.org/psf/codeofconduct/ > -- Antoine Rozo
_______________________________________________ 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/PDYA2XENUSG3SVYYUZC35UMUGCLEBJRQ/ Code of Conduct: http://python.org/psf/codeofconduct/