Commit d2466e3
authored
[perf] Make
``_format`` and the per-type helpers now ``yield`` their output as a stream of string chunks instead of writing to a file-like object, and ``pformat`` joins them. On top of that, ``pformat_lines`` pulls from the formatter only until a budget is reached:
pformat_lines(obj, max_lines=None, max_chars=None)
It stops on the first chunk that reaches *either* budget, so a huge collection costs O(budget) rather than O(N). Either dimension may be ``None`` (unbounded); with both ``None`` the whole object is formatted.
Benchmark (``PrettyPrinter`` alone, width 80)::
list(range(500_000)):
pformat().splitlines() ~805 ms
pformat_lines(max_lines=11) ~0.027 ms (~30000x)
[8 small ints] (common small diff):
pformat().splitlines() ~0.0133 ms
pformat_lines(max_lines=11) ~0.0163 ms (+3µs)
["x"*100_000] * 3 (flat, few huge elements):
pformat_lines(max_chars=640) stops after ~100_000 chars
(one element) instead of 300_000PrettyPrinter format lazily so output can be budget-capped (pytest-dev#14588)1 parent 4904d2b commit d2466e3
2 files changed
Lines changed: 486 additions & 158 deletions
0 commit comments