Currently you can write
term.join(xs) + term
if you want 1, 1, 2, 3, ... terminators when xs has 0, 1, 2, 3, ...
elements, and
term.join([*xs, '']) # or b''
if you want 0, 1, 2, 3, ... terminators, neither of which is prohibitively
annoying. What I don't like about the status quo is that I'm never sure
that the people who wrote "sep.join(xs) + sep" really want the separator
when xs is empty. Unless it's obvious from surrounding code that xs can't
be empty, I always worry it's a bug. In your PIL example,
arr = []
for elt in (description, cpright):
if elt:
arr.append(elt)
return "\r\n\r\n".join(arr) + "\r\n\r\n"
do they really want four newlines when the description and copyright are
both empty? I suspect not but I don't know. There's no clarifying comment.
In email.contentmanager they call splitlines on some text, then rejoin it
with '\n'.join(lines) + '\n'. It looks like the input can be empty since
there is some special-case code for that. Do they know that they're
increasing the number of newlines in that case? There's no clarifying
comment.
As for term.join([*xs, '']), while it seems less likely to be a bug, it's
not very natural. You aren't adding an extra blank thing at the end, you're
just terminating the things you already had.
So I think it would be nice to have a way to say explicitly and concisely
what you want to happen with an empty list. I suppose this idea will fail
for the usual reason (no good syntax), but here's an attempt:
term.joinlines(xs) in place of term.join([*xs, ''])
term.joinlines(xs) or term in place of term.join(xs) + term
The second one is less concise than before, but it doesn't give me that
uneasy feeling.
Adding a separator before the first element doesn't seem important enough
to me to justify the complexity of adding an option for it.
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/ZZ4MNCP2AFWKLAAT4QZFOM7LBWNPES7B/
Code of Conduct: http://python.org/psf/codeofconduct/