-
-
Notifications
You must be signed in to change notification settings - Fork 33.7k
Closed as not planned
Labels
3.13bugs and security fixesbugs and security fixesperformancePerformance or resource usagePerformance or resource usagestdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytype-featureA feature request or enhancementA feature request or enhancement
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.
Linked PRs
Metadata
Metadata
Assignees
Labels
3.13bugs and security fixesbugs and security fixesperformancePerformance or resource usagePerformance or resource usagestdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytype-featureA feature request or enhancementA feature request or enhancement