mirror of
https://github.com/python/cpython.git
synced 2025-08-01 15:43:13 +00:00
#2831: add start argument to enumerate(). Patch by Scott Dial and me.
This commit is contained in:
parent
ef9764f1a4
commit
913835763a
3 changed files with 45 additions and 11 deletions
|
@ -15,18 +15,36 @@ enum_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
|||
{
|
||||
enumobject *en;
|
||||
PyObject *seq = NULL;
|
||||
static char *kwlist[] = {"sequence", 0};
|
||||
PyObject *start = NULL;
|
||||
static char *kwlist[] = {"sequence", "start", 0};
|
||||
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kwds, "O:enumerate", kwlist,
|
||||
&seq))
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:enumerate", kwlist,
|
||||
&seq, &start))
|
||||
return NULL;
|
||||
|
||||
en = (enumobject *)type->tp_alloc(type, 0);
|
||||
if (en == NULL)
|
||||
return NULL;
|
||||
en->en_index = 0;
|
||||
if (start) {
|
||||
start = PyNumber_Index(start);
|
||||
if (start == NULL) {
|
||||
Py_DECREF(en);
|
||||
return NULL;
|
||||
}
|
||||
if (PyLong_Check(start)) {
|
||||
en->en_index = LONG_MAX;
|
||||
en->en_longindex = start;
|
||||
} else {
|
||||
assert(PyInt_Check(start));
|
||||
en->en_index = PyInt_AsLong(start);
|
||||
en->en_longindex = NULL;
|
||||
Py_DECREF(start);
|
||||
}
|
||||
} else {
|
||||
en->en_index = 0;
|
||||
en->en_longindex = NULL;
|
||||
}
|
||||
en->en_sit = PyObject_GetIter(seq);
|
||||
en->en_longindex = NULL;
|
||||
if (en->en_sit == NULL) {
|
||||
Py_DECREF(en);
|
||||
return NULL;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue