Well, if CPython is modified to implement tagged pointers and supports
storing a short strings (a few latin1 characters) as a pointer, it may
become harder to keep the same behavior for "x is y" where x and y are
strings.

Victor

Le sam. 21 mars 2020 à 17:23, Eric V. Smith <e...@trueblade.com> a écrit :
>
> On 3/21/2020 11:20 AM, Ned Batchelder wrote:
> > On 3/20/20 9:34 PM, Cameron Simpson wrote:
> >> On 20Mar2020 13:57, Eric Fahlgren <ericfahlg...@gmail.com> wrote:
> >>> On Fri, Mar 20, 2020 at 11:56 AM Dennis Sweeney
> >>> <sweeney.dennis...@gmail.com>
> >>> wrote:
> >>>
> >>>> If ``s`` is one these objects, and ``s`` has ``pre`` as a prefix, then
> >>>> ``s.cutprefix(pre)`` returns a copy of ``s`` in which that prefix has
> >>>> been removed.  If ``s`` does not have ``pre`` as a prefix, an
> >>>> unchanged copy of ``s`` is returned.  In summary, ``s.cutprefix(pre)``
> >>>> is roughly equivalent to ``s[len(pre):] if s.startswith(pre) else s``.
> >>>>
> >>>
> >>> The second sentence above unambiguously states that cutprefix
> >>> returns 'an
> >>> unchanged *copy*', but the example contradicts that and shows that
> >>> 'self'
> >>> may be returned and not a copy.  I think it should be reworded to
> >>> explicitly allow the optimization of returning self.
> >>
> >> My versions of these (plain old functions) return self if unchanged,
> >> and are explicitly documented as doing so.
> >>
> >> This has the concrete advantage that one can test for nonremoval if
> >> the suffix with "is", which is very fast, instead of == which may not
> >> be.
> >>
> >> So one writes (assuming methods):
> >>
> >>    prefix = cutsuffix(s, 'abc')
> >>    if prefix is s:
> >>        ... no change
> >>    else:
> >>        ... definitely changed, s != prefix also
> >>
> >> I am explicitly in favour of returning self if unchanged.
> >>
> >>
> > Why be so prescriptive? The semantics of these functions should be
> > about what the resulting string contains.  Leave it to implementors to
> > decide when it is OK to return self or not.
>
> The only reason I can think of is to enable the test above: did a
> suffix/prefix removal take place? That seems like a useful thing. I
> think if we don't specify the behavior one way or the other, people are
> going to rely on Cpython's behavior here, consciously or not.
>
> Is there some python implementation that would have a problem with the
> "is" test, if we were being this prescriptive? Honest question.
>
> Of course this would open the question of what to do if the suffix is
> the empty string. But since "'foo'.startswith('')" is True, maybe we'd
> have to return a copy in that case. It would be odd to have
> "s.startswith('')" be true, but "s.cutprefix('') is s" also be True. Or,
> since there's already talk in the PEP about what happens if the
> prefix/suffix is the empty string, and if we adopt the "is" behavior
> we'd add more details there. Like "if the result is the same object as
> self, it means either the suffix is the empty string, or self didn't
> start with the suffix".
>
> Eric
>
> _______________________________________________
> 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/HYSZSIAZA7QNPR43OCBXPWPAZKYTXB7L/
> Code of Conduct: http://python.org/psf/codeofconduct/



-- 
Night gathers, and now my watch begins. It shall not end until my death.
_______________________________________________
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/XA4T4ORWQE7LHZYS3WDGYDYNEEZXJMZN/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to