[Python-3000] Droping find/rfind?

Josiah Carlson jcarlson at uci.edu
Wed Aug 23 23:53:05 CEST 2006


"BJörn Lindqvist" <bjourne at gmail.com> wrote:
> 
> On 8/23/06, Josiah Carlson <jcarlson at uci.edu> wrote:
> 
> > or even
> >
> >     index = 0
> >     while 1:
> >         index = text.find(..., index)
> >         if index == -1:
> >             break
> >         ...
> > compared with
> >
> >     index = 0
> >     while 1:
> >         try:
> >             index = text.index(..., index)
> >         except ValueError:
> >             break
> >         ...
> 
> You are supposed to use the in operator:
> 
> index = 0
> while 1:
>     if not "something" in text[index:]:
>         break

This can also lead to O(n^2) running time, causes unnecessary string
allocation, memory copies, etc.  If I saw that in real code, I'd
probably lose respect for the author of that module and/or package.


> IMHO, removing find() is good because index() does the same job
> without violating the Samurai Principle
> (http://c2.com/cgi/wiki?SamuraiPrinciple). It would be interesting to
> see the patch that replaced find() with index(), did it really make
> the code more cumbersome?

Everywhere there is a test for index==str.find(...), needs to be
replaced with a try/except clause.  That's a cumbersome translation if
there ever was one.

 - Josiah



More information about the Python-3000 mailing list