(original) (raw)
changeset: 78156:51978f89e5ed user: Eli Bendersky eliben@gmail.com date: Tue Jul 17 15:09:12 2012 +0300 files: Lib/xml/etree/ElementTree.py description: Optimize tostringlist by taking the stream class outside the function. It's now 2x faster on short calls. Related to #1767933 diff -r 16e50e85d684 -r 51978f89e5ed Lib/xml/etree/ElementTree.py --- a/Lib/xml/etree/ElementTree.py Tue Jul 17 21:37:58 2012 +1000 +++ b/Lib/xml/etree/ElementTree.py Tue Jul 17 15:09:12 2012 +0300 @@ -1184,23 +1184,29 @@ # @defreturn sequence # @since 1.3 -def tostringlist(element, encoding=None, method=None): - data = [] - class DataStream(io.BufferedIOBase): - def writable(self): - return True +class _ListDataStream(io.BufferedIOBase): + """ An auxiliary stream accumulating into a list reference + """ + def __init__(self, lst): + self.lst = lst + + def writable(self): + return True - def seekable(self): - return True + def seekable(self): + return True - def write(self, b): - data.append(b) + def write(self, b): + self.lst.append(b) + + def tell(self): + return len(self.lst) - def tell(self): - return len(data) - - ElementTree(element).write(DataStream(), encoding, method=method) - return data +def tostringlist(element, encoding=None, method=None): + lst = [] + stream = _ListDataStream(lst) + ElementTree(element).write(stream, encoding, method=method) + return lst ## # Writes an element tree or element structure to sys.stdout. This /eliben@gmail.com