array_one = array["i", [1, 2, 3]]
mảng_hai = mảng["i", [6, 7, 8, 9]]
mảng_ba = mảng["f", [6. 4, 2. 2, 8. 7, 9. 0, 10. 5]]
mảng_bốn = mảng["f", [12. 5, 16. 1, 7. 3]]
in [mảng_một. đệm_info[]]
in [mảng_hai. đệm_info[]]
in [mảng_ba. đệm_info[]]
in [mảng_bốn. đệm_info[]]
Các đối tượng Python được triển khai trong C có thể xuất “giao diện bộ đệm. ” Các chức năng này có thể được sử dụng bởi một đối tượng để hiển thị dữ liệu của nó ở định dạng thô, hướng theo byte. Khách hàng của đối tượng có thể sử dụng giao diện bộ đệm để truy cập dữ liệu đối tượng trực tiếp mà không cần sao chép dữ liệu trước
Hai ví dụ về các đối tượng hỗ trợ giao diện bộ đệm là byte và mảng. Đối tượng byte hiển thị nội dung ký tự ở dạng hướng byte của giao diện bộ đệm. Một mảng cũng có thể hiển thị nội dung của nó, nhưng cần lưu ý rằng các phần tử mảng có thể là các giá trị nhiều byte
Ví dụ người dùng của giao diện bộ đệm là phương thức write[] của đối tượng tệp. Bất kỳ đối tượng nào có thể xuất một loạt byte thông qua giao diện bộ đệm đều có thể được ghi vào một tệp. Có một số mã định dạng hoạt động dựa trên giao diện bộ đệm của đối tượng, trả về dữ liệu từ đối tượng đích.
Thông tin thêm về giao diện bộ đệm được cung cấp trong phần , bên dưới phần mô tả cho
Các đối tượng bộ đệm rất hữu ích như một cách để hiển thị dữ liệu từ giao diện bộ đệm của một đối tượng khác cho lập trình viên Python. Chúng cũng có thể được sử dụng như một cơ chế cắt không sao chép. Sử dụng khả năng tham chiếu một khối bộ nhớ của họ, có thể hiển thị bất kỳ dữ liệu nào cho lập trình viên Python khá dễ dàng. Bộ nhớ có thể là một mảng lớn, không đổi trong phần mở rộng C, nó có thể là một khối bộ nhớ thô để thao tác trước khi chuyển đến thư viện hệ điều hành hoặc nó có thể được sử dụng để chuyển dữ liệu có cấu trúc ở định dạng trong bộ nhớ gốc của nó
Py_buffervoid *bufA con trỏ tới đầu bộ nhớ cho đối tượng. Py_ssize_t lenTổng chiều dài của bộ nhớ tính bằng byte. int readonlyMột chỉ báo cho biết bộ đệm có chỉ đọc hay không. const char *formatA Chuỗi kết thúc NULL theo cú pháp kiểu mô-đun cung cấp nội dung của các phần tử có sẵn thông qua bộ đệm. Nếu đây là NULL, "B" [byte không dấu] được giả định. int ndimSố thứ nguyên mà bộ nhớ biểu diễn dưới dạng một mảng nhiều chiều. Nếu nó là 0, và phải là NULL. Py_ssize_t *shapeMột mảng gồm Py_ssize_t s độ dài của hình dạng bộ nhớ dưới dạng mảng nhiều chiều. Lưu ý rằng [[*shape][0] * . * [*shape][ndims-1]]*itemsize phải bằng len . Py_ssize_t *stridesMột mảng gồm Py_ssize_ts độ dài của việc đưa ra số byte cần bỏ qua để đến phần tử mới trong mỗi thứ nguyên. Py_ssize_t *độ lệch conMột mảng gồm Py_ssize_t độ dài của. Nếu các số phần bù con này lớn hơn hoặc bằng 0, thì giá trị được lưu trữ dọc theo thứ nguyên được chỉ định là một con trỏ và giá trị phần bù con cho biết cần thêm bao nhiêu byte vào con trỏ sau khi bỏ tham chiếu. Một giá trị bù trừ con mà nó âm cho biết rằng không xảy ra hủy tham chiếu [dải trong một khối bộ nhớ liền kề].
Đây là một hàm trả về một con trỏ tới phần tử trong một mảng N-D được trỏ tới bởi một chỉ số chiều N khi có cả các bước và tập con không NULL
void *get_item_pointer[int ndim, void *buf, Py_ssize_t *strides, Py_ssize_t *suboffsets, Py_ssize_t *indices] { char *pointer = [char*]buf; int i; for [i = 0; i =0 ] { pointer = *[[char**]pointer] + suboffsets[i]; } } return [void*]pointer; }Py_ssize_t itemsizeĐây là nơi lưu trữ kích thước item [tính bằng byte] của từng thành phần trong bộ nhớ dùng chung. Về mặt kỹ thuật, nó không cần thiết vì nó có thể được lấy bằng cách sử dụng , tuy nhiên, nhà xuất khẩu có thể biết thông tin này mà không cần phân tích cú pháp chuỗi định dạng và cần phải biết kích thước mặt hàng để giải thích đúng cách. Do đó, lưu trữ nó thuận tiện hơn và nhanh hơn. void *internal Cái này được sử dụng nội bộ bởi đối tượng xuất khẩu. Ví dụ: điều này có thể được nhà xuất khẩu truyền lại dưới dạng số nguyên và được sử dụng để lưu trữ các cờ về việc có hay không giải phóng các mảng hình dạng, bước tiến và tập con khi bộ đệm được giải phóng. Người tiêu dùng không bao giờ nên thay đổi giá trị này
Các chức năng liên quan đến bộ đệm
int PyObject_CheckBuffer[ *obj]Return 1 nếu obj hỗ trợ giao diện bộ đệm nếu không thì 0. int PyObject_GetBuffer[ *obj, *view, int flags]Xuất obj thành , xem. Các đối số này không bao giờ được là NULL. Đối số flags là một trường bit cho biết loại bộ đệm mà người gọi chuẩn bị xử lý và do đó, loại bộ đệm nào mà nhà xuất khẩu được phép trả về. Giao diện bộ đệm cho phép các khả năng chia sẻ bộ nhớ phức tạp, nhưng một số người gọi có thể không xử lý được tất cả sự phức tạp nhưng có thể muốn xem liệu nhà xuất khẩu có cho phép họ xem bộ nhớ đơn giản hơn không