Is it really that much longer to write `f"{s1} {s2}"` when you want that?

Maybe a couple characters more total, but once you are in an f-string, you
can also do a zillion other things at the same time.

On Sun, Mar 5, 2023 at 10:42 PM Rob Cliffe via Python-ideas <
python-ideas@python.org> wrote:

> Tl;dr: Join strings together with exactly one space between non-blank
> text where they join.
>
> I propose a meaning for
>      s1 & s2
> where s1 and s2 are strings.
> Namely, that it should be equivalent to
>      s1.rstrip() + (' ' if (s1.strip() and s2.strip()) else '') +
> s2.lstrip()
> Informally, this will join the two strings together with exactly one space
> between the last non-blank text in s1 and the first non-blank text in s2.
> Example:  " bar     " & "    foo        "        ==        " bar
> foo        "
>
> This operator is associative, so there is no ambiguity in expressions
> such as
>      s1 & s2 & s3
> There *is* a possible ambiguity in expressions such as
>      s1 & s2 + s3
> where the relative precedence of `&` and `+` matters when s2 consists
> solely of white space.  E.g.
>      " A " & "  " + "     C" would evaluate
> to     " A C"
> not to " A     C"
> because `+` has a higher precedence than '&'.
>
> Utility:
>      In decades of experience with another language which had such an
> operator
>      (spelt differently) I have frequently found it useful for constructing
>      human-readable output (e.g. log output, debug/error messages,
> on-screen labels).
>
> Cognitive burden:
>      This would of course be one more thing to learn.
>      But I suggest that it is fairly intuitive that
>          s1 + s2
>          s1 & s2
>      both suggest that two strings are being combined in some way.
>
> Bars to overcome:
>      This change would require no fundamental change to Python;
>      just adding an `__and__ function to the str class.
>
> Backward compatibility:
>      Given that `str1 & str2` currently raises TypeError,
>      this change would be close to 100% backward-compatible.
>
> Alternative meanings:
>      As far as I know nobody has ever suggested an alternative meaning
> for `&` on strings.
>
> Bikeshedding:
>     (1) I don't think it is important for the utility of this change
>          whether `&` strips off all whitespace, or just spaces.
>          I think it is better if it strips off all whitespace,
>          so that it can be understood as working similarly to strip().
>     (2) The definition could be simplified to
>              s1.rstrip() + ' ' + s2.lstrip()
>          (leave an initial/final space when one string is whitespace only).
>          Again the operator would be associative.
>          Again I don't think this is important.
>
> Rob Cliffe
> _______________________________________________
> 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/66XP7GY56XU7H3P52IJENLSWJFW53XIN/
> Code of Conduct: http://python.org/psf/codeofconduct/
>


-- 
The dead increasingly dominate and strangle both the living and the
not-yet born.  Vampiric capital and undead corporate persons abuse
the lives and control the thoughts of homo faber. Ideas, once born,
become abortifacients against new conceptions.
_______________________________________________
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/M7H3VZFEUJFZDO3BAAVUGXNKBH6WF4NA/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to