The optimization introduced in #107374 can be improved as follows: ### Current code ```python 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 ```python 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 ```python 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. <!-- gh-linked-prs --> ### Linked PRs * gh-107426 <!-- /gh-linked-prs -->
Activity
hugovk commentedon Jul 29, 2023
cc @methane
optimize textwrap.indent() (python#107424)