[python] 파이썬 버퍼 타입은 무엇입니까?

buffer파이썬 에는 유형이 있지만 사용 방법을 모르겠습니다.

에서 파이썬 문서 에 대한 설명은 다음과 같습니다

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

객체 인수는 버퍼 호출 인터페이스 (예 : 문자열, 배열 및 버퍼)를 지원하는 객체 여야합니다. 객체 인수를 참조하는 새로운 버퍼 객체가 생성됩니다. 버퍼 객체는 객체의 시작 부분 (또는 지정된 오프셋)의 슬라이스입니다. 슬라이스는 객체의 끝까지 확장됩니다 (또는 size 인수가 제공 한 길이를 갖습니다).



답변

사용법 예 :

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

이 경우 버퍼는 길이가 5 인 위치 6에서 시작하는 하위 문자열이며 추가 저장 공간이 필요하지 않습니다.이 문자열은 문자열 조각을 참조합니다.

이 같은 짧은 문자열에는 유용하지 않지만 많은 양의 데이터를 사용할 때 필요할 수 있습니다. 이 예제는 변경 가능을 사용합니다 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'

데이터에 대해 둘 이상의보기를 원하고 여러 사본을 메모리에 보유하지 않으려는 경우 매우 유용합니다.

참고 buffer이름이 더 나은로 대체되었습니다 memoryview파이썬 2.7에서 하나를 사용 할 수 있지만, 파이썬 3.

또한 C API를 탐구하지 않고는 자신의 객체에 대한 버퍼 인터페이스를 구현할 수 없습니다. 즉 순수 Python에서는 수행 할 수 없습니다.


답변

나는 파이썬을 네이티브 라이브러리와 인터페이스 할 때 버퍼가 유용하다고 생각합니다. (Guido van Rossum 은이 메일 링리스트 게시물buffer 에서 설명합니다 ).

예를 들어, numpy는 효율적인 데이터 저장을 위해 버퍼를 사용하는 것 같습니다.

import numpy
a = numpy.ndarray(1000000)

a.data:

<read-write buffer for 0x1d7b410, size 8000000, offset 0 at 0x1e353b0>


답변