On 24 Mar 2020, at 2:42, Steven D'Aprano wrote:
On Sun, Mar 22, 2020 at 10:25:28PM -0000, Dennis Sweeney wrote:
Changes:
- More complete Python implementation to match what the type
checking in the C implementation would be
- Clarified that returning ``self`` is an optimization
- Added links to past discussions on Python-Ideas and Python-Dev
- Specified ability to accept a tuple of strings
I am concerned about that tuple of strings feature.
[...]
Aside from those questions about the reference implementation, I am
concerned about the feature itself. No other string method that
returns
a modified copy of the string takes a tuple of alternatives.
* startswith and endswith do take a tuple of (pre/suff)ixes, but they
don't return a modified copy; they just return a True or False flag;
* replace does return a modified copy, and only takes a single
substring at a time;
* find/index/partition/split etc don't accept multiple substrings
to search for.
That makes startswith/endswith the unusual ones, and we should be
conservative before emulating them.
Actually I would like for other string methods to gain the ability to
search for/chop off multiple substrings too.
A `find()` that supports multiple search strings (and returns the
leftmost position where a search string can be found) is a great help in
implementing some kind of tokenizer:
```python
def tokenize(source, delimiter):
lastpos = 0
while True:
pos = source.find(delimiter, lastpos)
if pos == -1:
token = source[lastpos:].strip()
if token:
yield token
break
else:
token = source[lastpos:pos].strip()
if token:
yield token
yield source[pos]
lastpos = pos + 1
print(list(tokenize(" [ 1, 2, 3] ", ("[", ",", "]"))))
```
This would output `['[', '1', ',', '2', ',', '3', ']']` if `str.find()`
supported multiple substring.
Of course to be really usable `find()` would have to return **which**
substring was found, which would make the API more complicated (and
somewhat incompatible with the existing `find()`).
But for `cutprefix()` (or whatever it's going to be called). I'm +1 on
supporting multiple prefixes. For ambiguous cases, IMHO the most
straight forward option would be to chop off the first prefix found.
[...]
Servus,
Walter
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at
https://mail.python.org/archives/list/python-dev@python.org/message/3MYYK6AINVTVCNVYC53FEB4T3LQGPWSC/
Code of Conduct: http://python.org/psf/codeofconduct/