Attempt to make all the various string *strip methods the same.

* Doc - add doc for when functions were added
 * UserString
 * string object methods
 * string module functions
'chars' is used for the last parameter everywhere.

These changes will be backported, since part of the changes
have already been made, but they were inconsistent.
This commit is contained in:
Neal Norwitz 2003-04-10 22:35:32 +00:00
parent 5c16c7b014
commit ffe33b7f24
6 changed files with 64 additions and 58 deletions

View file

@ -243,6 +243,8 @@ Return a copy of the string with leading characters removed. If
removed. If given and not \code{None}, \var{chars} must be a string; removed. If given and not \code{None}, \var{chars} must be a string;
the characters in the string will be stripped from the beginning of the characters in the string will be stripped from the beginning of
the string this method is called on. the string this method is called on.
\versionchanged[The \var{chars} parameter was added. The \var{chars}
parameter cannot be passed in earlier 2.2 versions]{2.2.3}
\end{funcdesc} \end{funcdesc}
\begin{funcdesc}{rstrip}{s\optional{, chars}} \begin{funcdesc}{rstrip}{s\optional{, chars}}
@ -251,6 +253,8 @@ Return a copy of the string with trailing characters removed. If
removed. If given and not \code{None}, \var{chars} must be a string; removed. If given and not \code{None}, \var{chars} must be a string;
the characters in the string will be stripped from the end of the the characters in the string will be stripped from the end of the
string this method is called on. string this method is called on.
\versionchanged[The \var{chars} parameter was added. The \var{chars}
parameter cannot be passed in 2.2 versions]{2.2.3}
\end{funcdesc} \end{funcdesc}
\begin{funcdesc}{strip}{s\optional{, chars}} \begin{funcdesc}{strip}{s\optional{, chars}}
@ -259,6 +263,8 @@ removed. If \var{chars} is omitted or \code{None}, whitespace
characters are removed. If given and not \code{None}, \var{chars} characters are removed. If given and not \code{None}, \var{chars}
must be a string; the characters in the string will be stripped from must be a string; the characters in the string will be stripped from
the both ends of the string this method is called on. the both ends of the string this method is called on.
\versionchanged[The \var{chars} parameter was added. The \var{chars}
parameter cannot be passed in 2.2 or 2.2.1]{2.2.2}
\end{funcdesc} \end{funcdesc}
\begin{funcdesc}{swapcase}{s} \begin{funcdesc}{swapcase}{s}

View file

@ -99,7 +99,7 @@ class UserString:
def join(self, seq): return self.data.join(seq) def join(self, seq): return self.data.join(seq)
def ljust(self, width): return self.__class__(self.data.ljust(width)) def ljust(self, width): return self.__class__(self.data.ljust(width))
def lower(self): return self.__class__(self.data.lower()) def lower(self): return self.__class__(self.data.lower())
def lstrip(self, sep=None): return self.__class__(self.data.lstrip(sep)) def lstrip(self, chars=None): return self.__class__(self.data.lstrip(chars))
def replace(self, old, new, maxsplit=-1): def replace(self, old, new, maxsplit=-1):
return self.__class__(self.data.replace(old, new, maxsplit)) return self.__class__(self.data.replace(old, new, maxsplit))
def rfind(self, sub, start=0, end=sys.maxint): def rfind(self, sub, start=0, end=sys.maxint):
@ -107,13 +107,13 @@ class UserString:
def rindex(self, sub, start=0, end=sys.maxint): def rindex(self, sub, start=0, end=sys.maxint):
return self.data.rindex(sub, start, end) return self.data.rindex(sub, start, end)
def rjust(self, width): return self.__class__(self.data.rjust(width)) def rjust(self, width): return self.__class__(self.data.rjust(width))
def rstrip(self, sep=None): return self.__class__(self.data.rstrip(sep)) def rstrip(self, chars=None): return self.__class__(self.data.rstrip(chars))
def split(self, sep=None, maxsplit=-1): def split(self, sep=None, maxsplit=-1):
return self.data.split(sep, maxsplit) return self.data.split(sep, maxsplit)
def splitlines(self, keepends=0): return self.data.splitlines(keepends) def splitlines(self, keepends=0): return self.data.splitlines(keepends)
def startswith(self, prefix, start=0, end=sys.maxint): def startswith(self, prefix, start=0, end=sys.maxint):
return self.data.startswith(prefix, start, end) return self.data.startswith(prefix, start, end)
def strip(self, sep=None): return self.__class__(self.data.strip(sep)) def strip(self, chars=None): return self.__class__(self.data.strip(chars))
def swapcase(self): return self.__class__(self.data.swapcase()) def swapcase(self): return self.__class__(self.data.swapcase())
def title(self): return self.__class__(self.data.title()) def title(self): return self.__class__(self.data.title())
def translate(self, *args): def translate(self, *args):

View file

@ -79,30 +79,31 @@ def strip(s, chars=None):
Return a copy of the string s with leading and trailing Return a copy of the string s with leading and trailing
whitespace removed. whitespace removed.
If chars is given and not None, remove characters in sep instead. If chars is given and not None, remove characters in chars instead.
If chars is unicode, S will be converted to unicode before stripping. If chars is unicode, S will be converted to unicode before stripping.
""" """
return s.strip(chars) return s.strip(chars)
# Strip leading tabs and spaces # Strip leading tabs and spaces
def lstrip(s): def lstrip(s, chars=None):
"""lstrip(s) -> string """lstrip(s [,chars]) -> string
Return a copy of the string s with leading whitespace removed. Return a copy of the string s with leading whitespace removed.
If chars is given and not None, remove characters in chars instead.
""" """
return s.lstrip() return s.lstrip(chars)
# Strip trailing tabs and spaces # Strip trailing tabs and spaces
def rstrip(s): def rstrip(s, chars=None):
"""rstrip(s) -> string """rstrip(s [,chars]) -> string
Return a copy of the string s with trailing whitespace Return a copy of the string s with trailing whitespace removed.
removed. If chars is given and not None, remove characters in chars instead.
""" """
return s.rstrip() return s.rstrip(chars)
# Split a string into a list of space/tab-separated words # Split a string into a list of space/tab-separated words

View file

@ -195,6 +195,33 @@ class CommonTest(unittest.TestCase):
self.checkequal(' hello', ' hello ', 'rstrip') self.checkequal(' hello', ' hello ', 'rstrip')
self.checkequal('hello', 'hello', 'strip') self.checkequal('hello', 'hello', 'strip')
# strip/lstrip/rstrip with None arg
self.checkequal('hello', ' hello ', 'strip', None)
self.checkequal('hello ', ' hello ', 'lstrip', None)
self.checkequal(' hello', ' hello ', 'rstrip', None)
self.checkequal('hello', 'hello', 'strip', None)
# strip/lstrip/rstrip with str arg
self.checkequal('hello', 'xyzzyhelloxyzzy', 'strip', 'xyz')
self.checkequal('helloxyzzy', 'xyzzyhelloxyzzy', 'lstrip', 'xyz')
self.checkequal('xyzzyhello', 'xyzzyhelloxyzzy', 'rstrip', 'xyz')
self.checkequal('hello', 'hello', 'strip', 'xyz')
# strip/lstrip/rstrip with unicode arg
if test_support.have_unicode:
self.checkequal(unicode('hello', 'ascii'), 'xyzzyhelloxyzzy',
'strip', unicode('xyz', 'ascii'))
self.checkequal(unicode('helloxyzzy', 'ascii'), 'xyzzyhelloxyzzy',
'lstrip', unicode('xyz', 'ascii'))
self.checkequal(unicode('xyzzyhello', 'ascii'), 'xyzzyhelloxyzzy',
'rstrip', unicode('xyz', 'ascii'))
self.checkequal(unicode('hello', 'ascii'), 'hello',
'strip', unicode('xyz', 'ascii'))
self.checkraises(TypeError, 'hello', 'strip', 42, 42)
self.checkraises(TypeError, 'hello', 'lstrip', 42, 42)
self.checkraises(TypeError, 'hello', 'rstrip', 42, 42)
def test_ljust(self): def test_ljust(self):
self.checkequal('abc ', 'abc', 'ljust', 10) self.checkequal('abc ', 'abc', 'ljust', 10)
self.checkequal('abc ', 'abc', 'ljust', 6) self.checkequal('abc ', 'abc', 'ljust', 6)
@ -432,34 +459,6 @@ class MixinStrUnicodeUserStringTest:
self.checkraises(TypeError, 'hello', 'endswith') self.checkraises(TypeError, 'hello', 'endswith')
self.checkraises(TypeError, 'hello', 'endswith', 42) self.checkraises(TypeError, 'hello', 'endswith', 42)
def test_strip_args(self):
# strip/lstrip/rstrip with None arg
self.checkequal('hello', ' hello ', 'strip', None)
self.checkequal('hello ', ' hello ', 'lstrip', None)
self.checkequal(' hello', ' hello ', 'rstrip', None)
self.checkequal('hello', 'hello', 'strip', None)
# strip/lstrip/rstrip with str arg
self.checkequal('hello', 'xyzzyhelloxyzzy', 'strip', 'xyz')
self.checkequal('helloxyzzy', 'xyzzyhelloxyzzy', 'lstrip', 'xyz')
self.checkequal('xyzzyhello', 'xyzzyhelloxyzzy', 'rstrip', 'xyz')
self.checkequal('hello', 'hello', 'strip', 'xyz')
# strip/lstrip/rstrip with unicode arg
if test_support.have_unicode:
self.checkequal(unicode('hello', 'ascii'), 'xyzzyhelloxyzzy',
'strip', unicode('xyz', 'ascii'))
self.checkequal(unicode('helloxyzzy', 'ascii'), 'xyzzyhelloxyzzy',
'lstrip', unicode('xyz', 'ascii'))
self.checkequal(unicode('xyzzyhello', 'ascii'), 'xyzzyhelloxyzzy',
'rstrip', unicode('xyz', 'ascii'))
self.checkequal(unicode('hello', 'ascii'), 'hello',
'strip', unicode('xyz', 'ascii'))
self.checkraises(TypeError, 'hello', 'strip', 42, 42)
self.checkraises(TypeError, 'hello', 'lstrip', 42, 42)
self.checkraises(TypeError, 'hello', 'rstrip', 42, 42)
def test___contains__(self): def test___contains__(self):
self.checkequal(True, '', '__contains__', '') # vereq('' in '', True) self.checkequal(True, '', '__contains__', '') # vereq('' in '', True)
self.checkequal(True, 'abc', '__contains__', '') # vereq('' in 'abc', True) self.checkequal(True, 'abc', '__contains__', '') # vereq('' in 'abc', True)

View file

@ -1770,12 +1770,12 @@ do_argstrip(PyStringObject *self, int striptype, PyObject *args)
PyDoc_STRVAR(strip__doc__, PyDoc_STRVAR(strip__doc__,
"S.strip([sep]) -> string or unicode\n\ "S.strip([chars]) -> string or unicode\n\
\n\ \n\
Return a copy of the string S with leading and trailing\n\ Return a copy of the string S with leading and trailing\n\
whitespace removed.\n\ whitespace removed.\n\
If sep is given and not None, remove characters in sep instead.\n\ If chars is given and not None, remove characters in chars instead.\n\
If sep is unicode, S will be converted to unicode before stripping"); If chars is unicode, S will be converted to unicode before stripping");
static PyObject * static PyObject *
string_strip(PyStringObject *self, PyObject *args) string_strip(PyStringObject *self, PyObject *args)
@ -1788,11 +1788,11 @@ string_strip(PyStringObject *self, PyObject *args)
PyDoc_STRVAR(lstrip__doc__, PyDoc_STRVAR(lstrip__doc__,
"S.lstrip([sep]) -> string or unicode\n\ "S.lstrip([chars]) -> string or unicode\n\
\n\ \n\
Return a copy of the string S with leading whitespace removed.\n\ Return a copy of the string S with leading whitespace removed.\n\
If sep is given and not None, remove characters in sep instead.\n\ If chars is given and not None, remove characters in chars instead.\n\
If sep is unicode, S will be converted to unicode before stripping"); If chars is unicode, S will be converted to unicode before stripping");
static PyObject * static PyObject *
string_lstrip(PyStringObject *self, PyObject *args) string_lstrip(PyStringObject *self, PyObject *args)
@ -1805,11 +1805,11 @@ string_lstrip(PyStringObject *self, PyObject *args)
PyDoc_STRVAR(rstrip__doc__, PyDoc_STRVAR(rstrip__doc__,
"S.rstrip([sep]) -> string or unicode\n\ "S.rstrip([chars]) -> string or unicode\n\
\n\ \n\
Return a copy of the string S with trailing whitespace removed.\n\ Return a copy of the string S with trailing whitespace removed.\n\
If sep is given and not None, remove characters in sep instead.\n\ If chars is given and not None, remove characters in chars instead.\n\
If sep is unicode, S will be converted to unicode before stripping"); If chars is unicode, S will be converted to unicode before stripping");
static PyObject * static PyObject *
string_rstrip(PyStringObject *self, PyObject *args) string_rstrip(PyStringObject *self, PyObject *args)

View file

@ -5247,12 +5247,12 @@ do_argstrip(PyUnicodeObject *self, int striptype, PyObject *args)
PyDoc_STRVAR(strip__doc__, PyDoc_STRVAR(strip__doc__,
"S.strip([sep]) -> unicode\n\ "S.strip([chars]) -> unicode\n\
\n\ \n\
Return a copy of the string S with leading and trailing\n\ Return a copy of the string S with leading and trailing\n\
whitespace removed.\n\ whitespace removed.\n\
If sep is given and not None, remove characters in sep instead.\n\ If chars is given and not None, remove characters in chars instead.\n\
If sep is a str, it will be converted to unicode before stripping"); If chars is a str, it will be converted to unicode before stripping");
static PyObject * static PyObject *
unicode_strip(PyUnicodeObject *self, PyObject *args) unicode_strip(PyUnicodeObject *self, PyObject *args)
@ -5265,11 +5265,11 @@ unicode_strip(PyUnicodeObject *self, PyObject *args)
PyDoc_STRVAR(lstrip__doc__, PyDoc_STRVAR(lstrip__doc__,
"S.lstrip([sep]) -> unicode\n\ "S.lstrip([chars]) -> unicode\n\
\n\ \n\
Return a copy of the string S with leading whitespace removed.\n\ Return a copy of the string S with leading whitespace removed.\n\
If sep is given and not None, remove characters in sep instead.\n\ If chars is given and not None, remove characters in chars instead.\n\
If sep is a str, it will be converted to unicode before stripping"); If chars is a str, it will be converted to unicode before stripping");
static PyObject * static PyObject *
unicode_lstrip(PyUnicodeObject *self, PyObject *args) unicode_lstrip(PyUnicodeObject *self, PyObject *args)
@ -5282,11 +5282,11 @@ unicode_lstrip(PyUnicodeObject *self, PyObject *args)
PyDoc_STRVAR(rstrip__doc__, PyDoc_STRVAR(rstrip__doc__,
"S.rstrip([sep]) -> unicode\n\ "S.rstrip([chars]) -> unicode\n\
\n\ \n\
Return a copy of the string S with trailing whitespace removed.\n\ Return a copy of the string S with trailing whitespace removed.\n\
If sep is given and not None, remove characters in sep instead.\n\ If chars is given and not None, remove characters in chars instead.\n\
If sep is a str, it will be converted to unicode before stripping"); If chars is a str, it will be converted to unicode before stripping");
static PyObject * static PyObject *
unicode_rstrip(PyUnicodeObject *self, PyObject *args) unicode_rstrip(PyUnicodeObject *self, PyObject *args)