py3: optimize py3 compat.bytechr using Struct.pack
authorMartin von Zweigbergk <martinvonz@google.com>
Wed, 15 Mar 2017 09:30:50 -0700
changeset 31424 4acc49335a6e
parent 31423 568d80b24b3a
child 31425 63a39d647888
py3: optimize py3 compat.bytechr using Struct.pack With Python 3.4.3, timeit says 0.437 usec -> 0.0685 usec. With Python 3.6, timeit says 0.157 usec -> 0.0907 usec. So it's faster on both versions, but the speedup varies a lot. Thanks to Gregory Szorc for the suggestion.
mercurial/pycompat.py
--- a/mercurial/pycompat.py	Wed Mar 15 19:26:20 2017 -0700
+++ b/mercurial/pycompat.py	Wed Mar 15 09:30:50 2017 -0700
@@ -38,6 +38,7 @@
     import builtins
     import functools
     import io
+    import struct
 
     fsencode = os.fsencode
     fsdecode = os.fsdecode
@@ -73,8 +74,7 @@
     if getattr(sys, 'argv', None) is not None:
         sysargv = list(map(os.fsencode, sys.argv))
 
-    def bytechr(i):
-        return bytes([i])
+    bytechr = struct.Struct('>B').pack
 
     def iterbytestr(s):
         """Iterate bytes as if it were a str object of Python 2"""