summaryrefslogtreecommitdiff
path: root/Lib
diff options
context:
space:
mode:
authorWalter Dörwald <walter@livinglogic.de>2002-04-15 13:36:47 +0000
committerWalter Dörwald <walter@livinglogic.de>2002-04-15 13:36:47 +0000
commit068325ef926538a30d7feb13f9b14a6163e24b6e (patch)
treec2eef78d030be1ce7a56b56420ba13a853aab57d /Lib
parentb384c7263928cc2d8dd16cac8537839673cd4982 (diff)
downloadcpython-git-068325ef926538a30d7feb13f9b14a6163e24b6e.tar.gz
Apply the second version of SF patch http://www.python.org/sf/536241
Add a method zfill to str, unicode and UserString and change Lib/string.py accordingly. This activates the zfill version in unicodeobject.c that was commented out and implements the same in stringobject.c. It also adds the test for unicode support in Lib/string.py back in and uses repr() instead() of str() (as it was before Lib/string.py 1.62)
Diffstat (limited to 'Lib')
-rwxr-xr-xLib/UserString.py1
-rw-r--r--Lib/string.py14
-rw-r--r--Lib/test/string_tests.py10
-rw-r--r--Lib/test/test_unicode.py14
4 files changed, 29 insertions, 10 deletions
diff --git a/Lib/UserString.py b/Lib/UserString.py
index f4f5cab96c..292e85242d 100755
--- a/Lib/UserString.py
+++ b/Lib/UserString.py
@@ -128,6 +128,7 @@ class UserString:
def translate(self, *args):
return self.__class__(self.data.translate(*args))
def upper(self): return self.__class__(self.data.upper())
+ def zfill(self, width): return self.__class__(self.data.zfill(width))
class MutableString(UserString):
"""mutable string objects
diff --git a/Lib/string.py b/Lib/string.py
index d68b0bf349..cd9909e266 100644
--- a/Lib/string.py
+++ b/Lib/string.py
@@ -190,7 +190,10 @@ def rfind(s, *args):
_float = float
_int = int
_long = long
-_StringTypes = (str, unicode)
+try:
+ _StringTypes = (str, unicode)
+except NameError:
+ _StringTypes = (str,)
# Convert string to float
def atof(s):
@@ -277,13 +280,8 @@ def zfill(x, width):
"""
if not isinstance(x, _StringTypes):
- x = str(x)
- n = len(x)
- if n >= width: return x
- sign = ''
- if x[0] in '-+':
- sign, x = x[0], x[1:]
- return sign + '0'*(width-n) + x
+ x = repr(x)
+ return x.zfill(width)
# Expand tabs in a string.
# Doesn't take non-printing chars into account, but does understand \n.
diff --git a/Lib/test/string_tests.py b/Lib/test/string_tests.py
index 5c8dd934c6..ea25983e76 100644
--- a/Lib/test/string_tests.py
+++ b/Lib/test/string_tests.py
@@ -227,6 +227,16 @@ def run_method_tests(test):
test('endswith', 'ab', 0, 'ab', 0, 1)
test('endswith', 'ab', 0, 'ab', 0, 0)
+ test('zfill', '123', '123', 2)
+ test('zfill', '123', '123', 3)
+ test('zfill', '123', '0123', 4)
+ test('zfill', '+123', '+123', 3)
+ test('zfill', '+123', '+123', 4)
+ test('zfill', '+123', '+0123', 5)
+ test('zfill', '-123', '-123', 3)
+ test('zfill', '-123', '-123', 4)
+ test('zfill', '-123', '-0123', 5)
+ test('zfill', '', '000', 3)
test('zfill', '34', '34', 1)
test('zfill', '34', '0034', 4)
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
index 4b77e7531e..29dd819bfa 100644
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -206,8 +206,18 @@ if 0:
test('capwords', u'abc\tdef\nghi', u'Abc Def Ghi')
test('capwords', u'abc\t def \nghi', u'Abc Def Ghi')
-verify(string.zfill(u'34', 1) == u'34')
-verify(string.zfill(u'34', 5) == u'00034')
+test('zfill', u'123', u'123', 2)
+test('zfill', u'123', u'123', 3)
+test('zfill', u'123', u'0123', 4)
+test('zfill', u'+123', u'+123', 3)
+test('zfill', u'+123', u'+123', 4)
+test('zfill', u'+123', u'+0123', 5)
+test('zfill', u'-123', u'-123', 3)
+test('zfill', u'-123', u'-123', 4)
+test('zfill', u'-123', u'-0123', 5)
+test('zfill', u'', u'000', 3)
+test('zfill', u'34', u'34', 1)
+test('zfill', u'34', u'00034', 5)
# Comparisons:
print 'Testing Unicode comparisons...',