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.
Linked PRs
Reactions are currently unavailable
The optimization introduced in #107374 can be improved as follows:
Current code
Improved code
Benchmarks
However the results are very different between two runs (and my laptop may be dying) so I'd like some confirmation from others.
Linked PRs