Commit eaef6151 authored by Raymond Hettinger's avatar Raymond Hettinger

As discussed on python-dev, changed builtin.zip() to handle zero arguments

by returning an empty list instead of raising a TypeError.
parent 9463792c
......@@ -1063,14 +1063,18 @@ It's a function
when the loop is usually terminated with \keyword{break}).
\end{funcdesc}
\begin{funcdesc}{zip}{seq1, \moreargs}
\begin{funcdesc}{zip}{\optional{seq1, \moreargs}}
This function returns a list of tuples, where the \var{i}-th tuple contains
the \var{i}-th element from each of the argument sequences. At
least one sequence is required, otherwise a \exception{TypeError} is
raised. The returned list is truncated in length to the length of
the \var{i}-th element from each of the argument sequences.
The returned list is truncated in length to the length of
the shortest argument sequence. When there are multiple argument
sequences which are all of the same length, \function{zip()} is
similar to \function{map()} with an initial argument of \code{None}.
With a single sequence argument, it returns a list of 1-tuples.
With no arguments, it returns an empty list.
\versionadded{2.0}
\versionchanged[Formerly, \function{zip()} required at least one argument
and \code{zip()} raised a \exception{TypeError} instead of returning
\code{[]}]{2.4}
\end{funcdesc}
......@@ -1126,7 +1126,8 @@ class BuiltinTest(unittest.TestCase):
if i < 0 or i > 2: raise IndexError
return i + 4
self.assertEqual(zip(a, I()), t)
self.assertRaises(TypeError, zip)
self.assertEqual(zip(), [])
self.assertEqual(zip(*[]), [])
self.assertRaises(TypeError, zip, None)
class G:
pass
......
......@@ -423,7 +423,10 @@ class TestCase(unittest.TestCase):
# Test zip()'s use of iterators.
def test_builtin_zip(self):
self.assertRaises(TypeError, zip)
self.assertEqual(zip(), [])
self.assertEqual(zip(*[]), [])
self.assertEqual(zip(*[(1, 2), 'ab']), [(1, 'a'), (2, 'b')])
self.assertRaises(TypeError, zip, None)
self.assertRaises(TypeError, zip, range(10), 42)
self.assertRaises(TypeError, zip, range(10), zip)
......
......@@ -12,6 +12,9 @@ What's New in Python 2.4 alpha 1?
Core and builtins
-----------------
- zip() with no arguments now returns an empty list instead of raising
a TypeError exception.
Extension modules
-----------------
......
......@@ -1916,11 +1916,9 @@ builtin_zip(PyObject *self, PyObject *args)
PyObject *itlist; /* tuple of iterators */
int len; /* guess at result length */
if (itemsize < 1) {
PyErr_SetString(PyExc_TypeError,
"zip() requires at least one sequence");
return NULL;
}
if (itemsize == 0)
return PyList_New(0);
/* args must be a tuple */
assert(PyTuple_Check(args));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment