how to convert string function to string method?
Bruno Desthuilliers
bruno.42.desthuilliers at websiteburo.invalid
Tue Dec 8 04:42:27 EST 2009
Dr. Phillip M. Feldman a écrit :
> Bruno- You've made some excellent suggestions, and I'm always grateful for
> the opportunity to learn.
Glad to know I've been of any help !-)
> My revised code appears below. Philllip
>
> def strip_pairs(s, open='([{\'"', close=')]}\'"'):
> """
> OVERVIEW
>
> This function strips matching pairs of characters from the beginning and
> end of the input string `s`. If `s` begins with a character in `open`
> and
> ends with the corresponding character in `close` (see below), both are
> removed from the string. This process continues until no further matching
> pairs can be removed.
>
> INPUTS
>
> `open` and `close`: These arguments, which must be equal-length strings,
> specify matching start-of-scope and end-of-scope characters. The same
> character may appear in both `open` and `close`; single and double quotes
> conventionally match themselves. By default, `open` contains a left
> parenthesis, left square bracket, left curly bracket, single quote, and
> double quote), and `close` contains the corresponding characters."""
>
> if not isinstance(s,(str,unicode)):
> raise TypeError, '`s` must be a string (str or unicode).'
Might be a bit more helpful (for the programmer using your function) to
specify what 's' actually is. Also, the recommanded way to raise
exceptions is to use the 'call' syntax, ie:
if not isinstance(s,(str,unicode)):
raise TypeError("'s' must be a str or unicode, got '%s'" % type(s))
> if not isinstance(open,(str,unicode)) or not
> isinstance(close,(str,unicode)):
> raise TypeError, '`open` and `close` must be strings (str or
> unicode).'
Mmmm.... I still wonder why you wouldn't accept a tuple or list of chars
here.
> if len(open) != len(close): raise ValueError, \
> '\'open\' and \'close\' arguments must be equal-length strings.'
>
> while len(s) >= 2:
>
> # Check whether first character of `s` is in `open`:
> i= open.find(s[0])
>
> # If `s` does not begin with a character from `open`, there are no
> more
> # pairs to be stripped:
> if i == -1: break
wrt/ readability, it might be better to put the break statement on it's
own line - but you can probably count this one as more of a personnal
preference than a guideline !-)
> # If `s` does not begin and end with matching characters, there are no
> # more pairs to be stripped:
> if s[-1] != close[i]: break
>
> # Strip the first and last character from `s`:
> s= s[1:-1]
> return s
Steven (D'Aprano) posted a possibly interesting implementation. Might be
worth timeit'ing both.
More information about the Python-list
mailing list