[Python-ideas] Use unbound bytes methods with objects supporting the buffer protocol

Serhiy Storchaka storchaka at gmail.com
Wed Jul 13 12:40:02 EDT 2016

Unbound methods can be used as functions in python. bytes.lower(b) is 
the same as b.lower() if b is an instance of bytes. Many functions and 
methods that work with bytes accept not just bytes, but arbitrary 
objects that support the buffer protocol. Including bytes methods:

     >>> b'a:b'.split(memoryview(b':'))
     [b'a', b'b']

But the first argument of unbound bytes method can be only a bytes instance.

     >>> bytes.split(memoryview(b'a:b'), b':')
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: descriptor 'split' requires a 'bytes' object but 
received a 'memoryview'

I think it would be helpful to allow using unbound bytes methods with 
arbitrary objects that support the buffer protocol as the first 
argument. This would allow to avoid unneeded copying (the primary 
purpose of the buffer protocol).

     >>> bytes.split(memoryview(b'a:b'), b':')
     [b'a', b'b']

More information about the Python-ideas mailing list