On 6/28/2019 10:10 AM, MRAB wrote:
On 2019-06-28 03:40, Glenn Linderman wrote:
On 6/27/2019 3:09 PM, Brett Cannon wrote:
My guess is that without Guido to just ask this will have to go to a PEP as it changes a built-in.
How does adding two new methods change a built-in?

Now if an extra parameter were added to modify lstrip, rstrip, and strip to make them do something different, yes.

But adding new methods doesn't change anything, unless someone is checking for their existence.

My preferred color is  pstrip and sstrip (prefix and suffix strip) since lstrip and rstrip mean left and right.

And maybe there should be a psstrip, that takes two parameters, the prefix and the suffix to strip.

Such functions would certainly reduce code in a lot of places where I do

if  string.startswith('foo'):
     string = string[ 3: ];

as well as making it more robust, because the string and its length have to stay synchronized when changes are made.

lstrip and rstrip remove treat the argument as a set of characters and can remove multiple characters, so having additional methods pstrip and sstrip with their very similar names but different behaviours could be confusing.

I'd prefer to stick with lXXX and rXXX. ldrop and rdrop, maybe?

I was thinking of the change from stripping sets of characters versus stripping specific sequences of characters, all being strip operations.

But when you point out the confusion and suggest the change of names, I got to thinking about names, and really, the   pstrip/ldrop or sstring/rdrop  operations are more like  "replace" than "strip"... there has to be an exact match.

So maybe a better solution to the functionality needed would be  lreplace and rreplace.  On the other hand,  the existing   .replace( prefix, '', 1 )  almost implements lreplace! It doesn't require it to be a prefix though :(  And there is no option for doing the last N replacements, nor requiring a single one to be a suffix.  The last N replacements could be done by using a negative N, but it would seem an additional parameter or new name would be required to do prefix- and suffix-restricted operations.

So my example above could be written as either:

string.lreplace('foo', '')

But calling the operations lreplace and rreplace, including the option of putting in replacement strings, would actually be quite handy.  Think of this:

filename.rreplace('.html', '.css', True )

where the first parameter is the suffix to remove, the second parameter is a suffix to replace it with, and the third parameter says to add the replacement even if the first parameter is not found/removed.  That's another operation I find frequently in batch file processing, that otherwise takes several lines.

As Ned noted in another branch of this discussion, it would be good to have an update for the 2.7 documentation.  And if new functions are added, by any name, it would be good to have the 3.x documentation clearly reference in both directions between lstrip and lreplace, and between rstrip and rreplace (or whatever names).