Do czego służy Bufor Pythona?

Jest typ buffer w Pythonie, ale nie wiem jak mogę go użyć.

W Python doc Opis jest następujący:

buffer(object[, offset[, size]])

Argument object musi być obiektem obsługującym interfejs wywołania bufora (np. ciągi znaków, tablice i bufory). Zostanie utworzony nowy obiekt bufora, który odwołuje się do argumentu obiektu. Obiekt bufora będzie wycinkiem od początku obiektu (lub od podanego offsetu). Kawałek będzie rozciągał się do końca obiekt (lub będzie miał długość określoną przez argument size).

Author: Arjun J Rao, 2010-08-06

2 answers

Przykładowe użycie:

>>> s = 'Hello world'
>>> t = buffer(s, 6, 5)
>>> t
<read-only buffer for 0x10064a4b0, size 5, offset 6 at 0x100634ab0>
>>> print t
world

Bufor w tym przypadku jest podciągiem, zaczynającym się na pozycji 6 o długości 5 i nie zajmuje dodatkowego miejsca-odwołuje się do fragmentu łańcucha.

Nie jest to zbyt przydatne w przypadku krótkich łańcuchów, ale może być konieczne przy użyciu dużych ilości danych. W tym przykładzie używa się zmiennej bytearray:

>>> s = bytearray(1000000)   # a million zeroed bytes
>>> t = buffer(s, 1)         # slice cuts off the first byte
>>> s[1] = 5                 # set the second element in s
>>> t[0]                     # which is now also the first element in t!
'\x05'

Może to być bardzo pomocne, jeśli chcesz mieć więcej niż jeden widok na danych i nie chcesz (lub nie możesz) trzymać wielu kopie w pamięci.

Zauważ, że buffer została zastąpiona przez lepiej nazwaną memoryview w Pythonie 3, choć można użyć albo w Pythonie 2.7.

Zauważ również, że nie możesz zaimplementować interfejsu bufora dla własnych obiektów bez zagłębiania się w C API, tzn. nie możesz tego zrobić w czystym Pythonie.

 125
Author: Scott Griffiths,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-06 15:17:18

Myślę, że bufory są przydatne np. podczas łączenia Pythona z natywnymi bibliotekami. (Guido van Rossum wyjaśnia buffer w ten post na liście mailingowej ).

Na przykład numpy używa bufora do efektywnego przechowywania danych:
import numpy
a = numpy.ndarray(1000000)

a.data jest:

<read-write buffer for 0x1d7b410, size 8000000, offset 0 at 0x1e353b0>
 21
Author: Andre Holzner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-25 07:25:31