Mercurial > cpython-lru_cache-weakref
diff Objects/fileobject.c @ 17911:fbffb6de25dd legacy-trunk
file_getiter(): make iter(file) be equivalent to file.xreadlines().
This should be faster.
This means:
(1) "for line in file:" won't work if the xreadlines module can't be
imported.
(2) The body of "for line in file:" shouldn't use the file directly;
the effects (e.g. of file.readline(), file.seek() or even
file.tell()) would be undefined because of the buffering that goes
on in the xreadlines module.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Tue, 22 May 2001 16:48:37 +0000 |
| parents | aac65f50df6f |
| children | f8bd14aef4d6 |
line wrap: on
line diff
--- a/Objects/fileobject.c Tue May 22 16:44:33 2001 +0000 +++ b/Objects/fileobject.c Tue May 22 16:48:37 2001 +0000 @@ -1298,18 +1298,9 @@ } static PyObject * -file_getiter(PyFileObject *f) +file_getiter(PyObject *f) { - static PyObject *es; - PyObject *iter; - PyObject *rl = Py_FindMethod(file_methods, (PyObject *)f, "readline"); - if (rl == NULL) - return NULL; - if (es == NULL) - es = PyString_FromString(""); - iter = PyCallIter_New(rl, es); - Py_DECREF(rl); - return iter; + return PyObject_CallMethod(f, "xreadlines", ""); } PyTypeObject PyFile_Type = { @@ -1339,7 +1330,7 @@ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ - (getiterfunc)file_getiter, /* tp_iter */ + file_getiter, /* tp_iter */ 0, /* tp_iternext */ };
