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')
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).