Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 43cc5f2

Browse files
committed
Optimize tostringlist by taking the stream class outside the function. It's now 2x faster on short calls. Related to #1767933
1 parent 9455492 commit 43cc5f2

1 file changed

Lines changed: 19 additions & 13 deletions

File tree

Lib/xml/etree/ElementTree.py

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1184,23 +1184,29 @@ def tostring(element, encoding=None, method=None):
11841184
# @defreturn sequence
11851185
# @since 1.3
11861186

1187-
def tostringlist(element, encoding=None, method=None):
1188-
data = []
1189-
class DataStream(io.BufferedIOBase):
1190-
def writable(self):
1191-
return True
1187+
class _ListDataStream(io.BufferedIOBase):
1188+
""" An auxiliary stream accumulating into a list reference
1189+
"""
1190+
def __init__(self, lst):
1191+
self.lst = lst
1192+
1193+
def writable(self):
1194+
return True
11921195

1193-
def seekable(self):
1194-
return True
1196+
def seekable(self):
1197+
return True
11951198

1196-
def write(self, b):
1197-
data.append(b)
1199+
def write(self, b):
1200+
self.lst.append(b)
11981201

1199-
def tell(self):
1200-
return len(data)
1202+
def tell(self):
1203+
return len(self.lst)
12011204

1202-
ElementTree(element).write(DataStream(), encoding, method=method)
1203-
return data
1205+
def tostringlist(element, encoding=None, method=None):
1206+
lst = []
1207+
stream = _ListDataStream(lst)
1208+
ElementTree(element).write(stream, encoding, method=method)
1209+
return lst
12041210

12051211
##
12061212
# Writes an element tree or element structure to sys.stdout. This

0 commit comments

Comments
 (0)