Mercurial > cpython-lru_cache-weakref
diff Python/bltinmodule.c @ 41501:0c5019afc55b
PEP 3114: rename .next() to .__next__() and add next() builtin.
| author | Georg Brandl <georg@python.org> |
|---|---|
| date | Sat, 21 Apr 2007 15:47:16 +0000 |
| parents | 3c339de80010 |
| children | 06145fbc7ab9 |
line wrap: on
line diff
--- a/Python/bltinmodule.c Tue Apr 17 21:58:50 2007 +0000 +++ b/Python/bltinmodule.c Sat Apr 21 15:47:16 2007 +0000 @@ -1137,6 +1137,46 @@ static PyObject * +builtin_next(PyObject *self, PyObject *args) +{ + PyObject *it, *res; + PyObject *def = NULL; + + if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def)) + return NULL; + if (!PyIter_Check(it)) { + PyErr_Format(PyExc_TypeError, + "%.200s object is not an iterator", it->ob_type->tp_name); + return NULL; + } + + res = (*it->ob_type->tp_iternext)(it); + if (res == NULL) { + if (def) { + if (PyErr_Occurred() && + !PyErr_ExceptionMatches(PyExc_StopIteration)) + return NULL; + PyErr_Clear(); + Py_INCREF(def); + return def; + } else if (PyErr_Occurred()) { + return NULL; + } else { + PyErr_SetNone(PyExc_StopIteration); + return NULL; + } + } + return res; +} + +PyDoc_STRVAR(next_doc, +"next(iterator[, default])\n\ +\n\ +Return the next item from the iterator. If default is given and the iterator\n\ +is exhausted, it is returned instead of raising StopIteration."); + + +static PyObject * builtin_setattr(PyObject *self, PyObject *args) { PyObject *v; @@ -2252,6 +2292,7 @@ {"map", builtin_map, METH_VARARGS, map_doc}, {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc}, {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc}, + {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc}, {"oct", builtin_oct, METH_O, oct_doc}, {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc}, {"ord", builtin_ord, METH_O, ord_doc},
