]> granicus.if.org Git - python/commitdiff
Optimize tostringlist by taking the stream class outside the function. It's now 2x...
authorEli Bendersky <eliben@gmail.com>
Tue, 17 Jul 2012 12:09:12 +0000 (15:09 +0300)
committerEli Bendersky <eliben@gmail.com>
Tue, 17 Jul 2012 12:09:12 +0000 (15:09 +0300)
Lib/xml/etree/ElementTree.py

index 3981659dd93ae940ff6af63366bc7b0f71ff5203..be6cf11af8d91dfb640f1ba9648ca23878a75dd3 100644 (file)
@@ -1184,23 +1184,29 @@ def tostring(element, encoding=None, method=None):
 # @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(data)
+    def tell(self):
+        return len(self.lst)
 
-    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