Contoh penggunaan:
>>> s = 'Hello world'
>>> t = buffer(s, 6, 5)
>>> t
<read-only buffer for 0x10064a4b0, size 5, offset 6 at 0x100634ab0>
>>> print t
world
Buffer dalam hal ini adalah sub-string, dimulai dari posisi 6 dengan panjang 5, dan tidak membutuhkan ruang penyimpanan ekstra - ini mereferensikan sepotong string.
Ini tidak terlalu berguna untuk string pendek seperti ini, tetapi mungkin diperlukan saat menggunakan data dalam jumlah besar. Contoh ini menggunakan bisa berubah bytearray
:
>>> s = bytearray(1000000)
>>> t = buffer(s, 1)
>>> s[1] = 5
>>> t[0]
'\x05'
Ini bisa sangat membantu jika Anda ingin memiliki lebih dari satu tampilan pada data dan tidak ingin (atau tidak bisa) menyimpan banyak salinan dalam memori.
Perhatikan bahwa buffer
telah diganti dengan yang lebih baik bernama memoryview
di Python 3, meskipun Anda dapat menggunakan baik di Python 2.7.
Perhatikan juga bahwa Anda tidak dapat mengimplementasikan antarmuka buffer untuk objek Anda sendiri tanpa mempelajari C API, yaitu Anda tidak dapat melakukannya dengan Python murni.
s[6:11]
juga tidak memakan ruang penyimpanan ekstra, apakah saya salah?s[6:11]
akan menjadi salinan. Jika Anda mengaturt = s[6:11]
dan kemudiandel s
, itu membebaskan memori yang diambil olehs
, membuktikan bahwat
disalin. (Untuk melihat ini, Anda membutuhkan yang lebih besars
dan melacak penggunaan memori Python). Namun, jauh lebih efisien hanya membuat salinan jika tidak banyak data yang terlibat.Saya pikir buffer misalnya berguna saat menghubungkan python ke perpustakaan asli. (Guido van Rossum menjelaskan
buffer
di pos milis ini ).Misalnya, numpy tampaknya menggunakan buffer untuk penyimpanan data yang efisien:
import numpy a = numpy.ndarray(1000000)
itu
a.data
adalah:<read-write buffer for 0x1d7b410, size 8000000, offset 0 at 0x1e353b0>
sumber