Closed as not planned
Description
The optimization introduced in #107374 can be improved as follows:
Current code
if predicate is None:
predicate = lambda s: not s.isspace()
prefixed_lines = []
for line in text.splitlines(True):
if predicate(line):
prefixed_lines.append(prefix)
prefixed_lines.append(line)
Improved code
prefixed_lines = []
if predicate is None:
for line in text.splitlines(True):
if not line.isspace():
prefixed_lines.append(prefix)
prefixed_lines.append(line)
else:
for line in text.splitlines(True):
if predicate(line):
prefixed_lines.append(prefix)
prefixed_lines.append(line)
Benchmarks
import timeit
import textwrap
with open("Objects/unicodeobject.c") as f:
text = f.read()
print(f"indent {len(text.splitlines())} lines.")
it = timeit.Timer(lambda: textwrap.indent(text, ' ' * 4))
result = it.repeat(number=1000)
result.sort()
print(f"{result[0]:.4f}msec")
- Current: 7.9305msec
- After: 6.7143msec
However the results are very different between two runs (and my laptop may be dying) so I'd like some confirmation from others.