On 31/08/17 08:10, Steven D'Aprano wrote:
So I'd like to propose some additions to 3.7 or 3.8. If the feedback here
is positive, I'll take it to Python-Ideas for the negative feedback :-)
(1) Add a new string method, which performs a case-insensitive equality
test. Here is a potential implementation, written in pure Python:
def equal(self, other):
if self is other:
return True
if not isinstance(other, str):
raise TypeError
if len(self) != len(other):
return False
casefold = str.casefold
for a, b in zip(self, other):
if casefold(a) != casefold(b):
return False
return True
I'd quibble about the name and the implementation (length is not
preserved under casefolding), but I'd go for this. The number of times
I've written something like this in different languages...
Alternatively: how about a === triple-equals operator to do the same
thing?
Much less keen on new syntax, especially when other languages use it for
other purposes.
(2) Add keyword-only arguments to str.find and str.index:
casefold=False
which does nothing if false (the default), and switches to a case-
insensitive search if true.
There's an implementation argument to be had about whether separate
casefolded methods would be better, but yes.
Unsolved problems:
This proposal doesn't help with sets and dicts, list.index and the `in`
operator either.
The only way I can think of to get much traction with this is to have a
separate case-insensitive string class. That feels a bit heavyweight,
though.
--
Rhodri James *-* Kynesim Ltd
--
https://mail.python.org/mailman/listinfo/python-list