Nick Coghlan wrote: > The example where the new function was used instead of a questionable use of replace gave me an idea, though: what if the new functions were "replacestart()" and "replaceend()"? > > * uses "start" and "with" for consistency with the existing checks > * substring based, like the "replace" method > * can be combined with an extension of "replace()" to also accept a tuple of old values to match and replace to allow for consistency with checking for multiple prefixes or suffixes.
FWIW, I don't place as much value on being consistent with "startswith()" and "endswith()". But with it being substring based, I think the term "replace" actually makes a lot more sense here compared to "cut". +1 On Sat, Mar 21, 2020 at 9:46 PM Nick Coghlan <ncogh...@gmail.com> wrote: > On Sat., 21 Mar. 2020, 11:19 am Nathaniel Smith, <n...@pobox.com> wrote: > >> On Fri, Mar 20, 2020 at 11:54 AM Dennis Sweeney >> <sweeney.dennis...@gmail.com> wrote: >> > This is a proposal to add two new methods, ``cutprefix`` and >> > ``cutsuffix``, to the APIs of Python's various string objects. >> >> The names should use "start" and "end" instead of "prefix" and >> "suffix", to reduce the jargon factor and for consistency with >> startswith/endswith. >> > > This would also be more consistent with startswith() & endswith(). (For > folks querying this: the relevant domain here is "str builtin method > names", and we already use startswith/endswith there, not > hasprefix/hassuffix. The most challenging relevant audience for new str > builtin method *names* is also 10 year olds learning to program in school, > not adults reading the documentation) > > I think the concern about stripstart() & stripend() working with > substrings, while strip/lstrip/rstrip work with character sets, is valid, > but I also share the concern about introducing "cut" as yet another verb to > learn in the already wide string API. > > The example where the new function was used instead of a questionable use > of replace gave me an idea, though: what if the new functions were > "replacestart()" and "replaceend()"? > > * uses "start" and "with" for consistency with the existing checks > * substring based, like the "replace" method > * can be combined with an extension of "replace()" to also accept a tuple > of old values to match and replace to allow for consistency with checking > for multiple prefixes or suffixes. > > We'd expect the most common case to be the empty string, but I think the > meaning of the following is clear, and consistent with the current practice > of using replace() to delete text from anywhere within the string: > > s = s.replacestart('context.' , '') > > This approach would also very cleanly handle the last example from the PEP: > > s = s.replaceend(('Mixin', 'Tests', 'Test'), '') > > The doubled 'e' in 'replaceend' isn't ideal, but if we went this way, I > think keeping consistency with other str method names would be preferable > to adding an underscore to the name. > > Interestingly, you could also use this to match multiple prefixes or > suffixes and find out *which one* matched (since the existing methods don't > report that): > > s2 = s.replaceend(suffixes, '') > suffix_len = len(s) - len(s2) > suffix = s[-suffix-len:] if suffix_len else None > > Cheers, > Nick. > > >> _______________________________________________ > 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/VQULYFFT4VVXV35RE5ETR5MOZSHLPFTV/ > Code of Conduct: http://python.org/psf/codeofconduct/ >
_______________________________________________ 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/KFDWZ3LWUIE6KHYQYU6Z5VL3SXMMMZOM/ Code of Conduct: http://python.org/psf/codeofconduct/