diff --git a/Lib/pprint.py b/Lib/pprint.py index 34ed12637..575688d8e 100644 --- a/Lib/pprint.py +++ b/Lib/pprint.py @@ -637,6 +637,19 @@ def _recursion(object): % (type(object).__name__, id(object))) +def _perfcheck(object=None): + import time + if object is None: + object = [("string", (1, 2), [3, 4], {5: 6, 7: 8})] * 100000 + p = PrettyPrinter() + t1 = time.perf_counter() + p._safe_repr(object, {}, None, 0, True) + t2 = time.perf_counter() + p.pformat(object) + t3 = time.perf_counter() + print("_safe_repr:", t2 - t1) + print("pformat:", t3 - t2) + def _wrap_bytes_repr(object, width, allowance): current = b'' last = len(object) // 4 * 4 @@ -653,3 +666,6 @@ def _wrap_bytes_repr(object, width, allowance): current = candidate if current: yield repr(current) + +if __name__ == "__main__": + _perfcheck() diff --git a/Lib/test/test_pprint.py b/Lib/test/test_pprint.py index 6ea7e7db2..c7b989394 100644 --- a/Lib/test/test_pprint.py +++ b/Lib/test/test_pprint.py @@ -203,7 +203,7 @@ class QueryTestCase(unittest.TestCase): def test_unreadable(self): # Not recursive but not readable anyway pp = pprint.PrettyPrinter() - for unreadable in object(), int, pprint, pprint.isrecursive: + for unreadable in type(3), pprint, pprint.isrecursive: # module-level convenience functions self.assertFalse(pprint.isrecursive(unreadable), "expected not isrecursive for %r" % (unreadable,))