new string method in 2.5 (partition)

Jack Diederich jackdied at jackdied.com
Tue Sep 19 16:42:54 EDT 2006


On Tue, Sep 19, 2006 at 07:23:50PM +0000, John Salerno wrote:
> Bruno Desthuilliers wrote:
> 
> > Err... is it me being dumb, or is it a perfect use case for str.split ?
> 
> Hmm, I suppose you could get nearly the same functionality as using 
> split(':', 1), but with partition you also get the separator returned as 
> well.
> 
> > There are IMVHO  much exciting new features in 2.5 (enhanced generators, 
> > try/except/finally, ternary operator, with: statement etc...)
> 
> I definitely agree, but I figure everyone knows about those already. 
> There are also the startswith() and endswith() string methods that are 
> new and seem neat as well.

Partition is much, much nicer than index() or find() for many
(but not all) applications.

diff for cgi.py parsing "var=X" 
-        i = p.find('=')
-        if i >= 0:
-            name = p[:i]
-            value = p[i+1:]
+        (name, sep_found, value) = p.partition('=')

Notice that preserving the seperator makes for a nice boolean
to test if the partition was successful.  Partition raises an
error if you pass an empty seperator.

parition also has the very desirable feature of returning the orignal
string when the seperator isn't found

ex/

script = 'foo.cgi?a=7'
script, sep, params = script.partition('?')

"script" will be "foo.cgi" even if there are no params.  With
find or index you have to slice the string by hand and with split
you would do something like.

  try:
    script, params = script.split('?')
  except ValueError: pass

or

  parts = script.split('?', 1)
  script = parts[0] 
  params = ''.join(parts[1:])


Grep your source for index, find, and split and try rewriting
the code with partition.  Not every instance will turn out cleaner
but many will.

Long-live-partition-ly,

-Jack



More information about the Python-list mailing list