Skip to content

Optimize textwrap.indent() #107369

Description

@methane

Current code:

defindent(text, prefix, predicate=None):
"""Adds 'prefix' to the beginning of selected lines in 'text'. If 'predicate' is provided, 'prefix' will only be added to the lines where 'predicate(line)' is True. If 'predicate' is not provided, it will default to adding 'prefix' to all non-empty lines that do not consist solely of whitespace characters. """ifpredicateisNone:
defpredicate(line):
returnline.strip()
defprefixed_lines():
forlineintext.splitlines(True):
yield (prefix+lineifpredicate(line) elseline)
return''.join(prefixed_lines())
  • predicate = str.strip is faster than def predicate(line)
  • ''.join(x) converts input iterable to sequence. Using generator just makes overhead.
  • creating temporary prefix + line is avoidable.

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    performancePerformance or resource usagestdlibStandard Library Python modules in the Lib/ directory

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions