On Thu, Mar 05, 2020 at 12:45:28PM -0800, Andrew Barnert via Python-ideas wrote:

> Well, I like the idea if someone can come up with a good naming 
> scheme—something that at least reminds me which function is the “set 
> of chars” stripper and which the “substring” stripper,

You've been a Python programmer for how many years now? Do you currently 
have trouble remembering what lstrip and rstrip do? If not, I doubt you 
will suddenly forget their meaning because we add a pair of new methods 
with quite different names.

Unless, of course, we go down the path of a foolish consistency and 
choose names which are too similar:

    lcut
    lremove
    ldelete

in which case you are right, people would certainly confuse the two. So 
let's not do that :-)

This proposal isn't for a generic "substring" stripper. We already have 
that, it is called str.replace. This proposal is specifically for 
removing *prefixes and suffixes* not arbitrary substrings.

Referencing the words "prefix" and "suffix" is not "gratuitously" adding 
"yet another way to say l/left/start" but a critical part of the 
methods' semantics. If we were to describe what the proposed methods do, 
we surely would say something like these:

    cut the prefix
    delete the prefix
    remove the prefix
    strip the prefix
    trim the prefix

because that is what the method does: it cuts/deletes etc the *prefix*, 
not some arbitrary substring or set of characters. But we wouldn't say:

    cut the substring on the left

because "on the left" is not sufficient. How far on the left? Can the 
substring be anywhere in the left half of the string?

    "The red peppers are very red and fresh".cut_left_substring("red")
    => "The peppers are very red and fresh"

I hope that we can agree that some names are simply too long and 
cumbersome:

    str.cut_substring_all_the_way_on_left(prefix)

We already have `[l|r]strip` methods. If we want to associate the new 
methods with those, I suggest

    strip_prefix
    strip_suffix

which will show up right next to `strip` in the docs and state 
explicitly what they do. (Personally, I prefer to add a little more 
conceptual distance by calling the method "cut_" but I'm willing to 
accept "strip" if others like it.)

I trust that is clear enough. If not, what else could "strip prefix" 
mean, if not strip the prefix?

Contrast:

    lstrip_string

"Yes, I know it operates on a string, it's a string method after all. 
But what does it do?"



The following is a tangential note about some Python history, and isn't 
really relevant to the proposal as such. So you can stop reading here 
without missing anything important.



[Christopher]
> > 1) I don’t think any other string methods take keywords.

[Andrew]
> Sure, but they mostly go back to the days before keyword arguments 
> existed at all, much less now when they can be implemented relatively 
> easily even in C functions.

Keywords predate string methods.

String methods were only added in Python 2.0:

https://docs.python.org/2.0/lib/string-methods.html

In Python 1.5, strings had no methods:

    >>> 'a'.upper()
    Traceback (innermost last):
      File "<stdin>", line 1, in ?
    AttributeError: 'string' object has no attribute 'upper'

and we used the "string" module functions. I don't see any builtins with 
keyword arguments in Python 1.5:

https://docs.python.org/release/1.5/lib/node26.html

but pure Python functions certainly had them. Since string functions 
were originally written in Python, they could have had keyword 
arguments had they been desired.


-- 
Steven
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/[email protected]/message/K4REZUP24TUGZZ5P5KMG3KRR5DFTMWQ4/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to