import sys PY3 = sys.version_info[0] == 3 try: from itertools import izip xrange = xrange except ImportError: # py3 izip = zip xrange = range # end handle python version try: # Python 2 buffer = buffer memoryview = buffer # Assume no memory view ... def to_bytes(i): return i except NameError: # Python 3 has no `buffer`; only `memoryview` # However, it's faster to just slice the object directly, maybe it keeps a view internally def buffer(obj, offset, size=None): if size is None: # return memoryview(obj)[offset:] return obj[offset:] else: # return memoryview(obj)[offset:offset+size] return obj[offset:offset + size] # end buffer reimplementation # smmap can return memory view objects, which can't be compared as buffers/bytes can ... def to_bytes(i): if isinstance(i, memoryview): return i.tobytes() return i memoryview = memoryview try: MAXSIZE = sys.maxint except AttributeError: MAXSIZE = sys.maxsize