我對Python中的術語'buffer Interface'非常困惑。這是什麼意思,說「一個暴露其底層內存結構的python對象」可以用一個例子來解釋。在此先感謝關於python中的緩衝區接口
4
A
回答
3
「底層內存結構」指構成計算機內存中對象的八位組序列。例如,當您創建字符串時,Python必須至少保留3個字節的內存並存儲字母a
,b
和c
。如果內存是連續的(如字符串的情況),則其地址和大小可以是傳遞給想要檢查它的任何一段C代碼,而不經過Python str
類型的開銷。
一個有用的示例是array
類型。數組是一個非常類似於Python列表的序列,不同之處在於它包含單一類型的元素 - 您可以有一個int數組和一個浮點數組,但不能混合這兩個元素。好處是數組儘可能高效地打包數據,並將它們存儲在一個平面C數組中。該數組通過緩衝區接口暴露 - 它允許查詢底層C數組的確切內存位置和大小,並將其傳遞給某些C函數,該函數將有效地初始化它或將其寫入磁盤。 numpy
數字包是圍繞Python和C(甚至FORTRAN)之間的這種數據共享構建的,爲此它們擴展了緩衝區協議,其中一些擴展使其成爲Python 3.
對象mmap
提供了一個用於OS級內存映射功能的Python接口,還提供了一個緩衝接口。這使得必須有效訪問存儲器的C代碼(例如re
模塊)也可用於內存映射區域。
相關問題
- 1. 哪些方法在Python中實現緩衝區接口?
- 2. 關於流緩衝區的困惑
- 3. 關於緩衝區溢出的練習
- 4. 大緩衝區開關與小緩衝區開關的成本
- 5. 公開協議緩衝區接口
- 6. TypeError:str不支持緩衝區接口
- 7. Python3.4'str'dons不支持緩衝區接口
- 8. 類型錯誤:「STR」不支持緩衝區接口,Python的3
- 9. 用於TCP連接的緩衝區
- 10. 關於模型的頂點緩衝區和索引緩衝區的困惑
- 11. 關於緩衝區加載和緩衝區保存的觸發命令
- 12. TypeError:'str'不支持緩衝區接口 - python
- 13. 在預覽窗口中打開新緩衝區時佔用Vim預覽窗口的自動關閉緩衝區
- 14. 緩衝區caache用於符號鏈接
- 15. 窗口內的中心Emacs緩衝區
- 16. 沒有填充接收緩衝區的UDP緩衝區溢出?
- 17. Python緩衝區解碼
- 18. Python/PyAudio - 緩衝區欠載
- 19. 關閉緩衝區後顯示Emacs緩衝區
- 20. Python中的二進制緩衝區
- 21. 在Vim緩衝區中的Python?
- 22. 緩衝區位於何處?
- 23. 如何在焦點位於緩衝區列表中的其他窗口中實時顯示緩衝區內容
- 24. TypeError:'str'不支持3.4.1中的緩衝區接口
- 25. 清除C#中的串口接收緩衝區#
- 26. 當dest緩衝區小於src緩衝區時strcpy
- 27. netty接收大緩衝區
- 28. TCP接收緩衝區
- 29. 套接字和緩衝區
- 30. JNI直接緩衝區。誰負責本地緩衝區釋放?
這是否意味着說每個python對象都有一個等效的C表示,由python解釋器用於處理。我們可以訪問支持緩衝接口的對象的C表示。 – user634615
@ user634615每個Python對象都必須以某種方式在內存中表示,並且由於CPython在C中實現,因此表示形式最終基於C的數據類型。在某些情況下(數組),在Python之外公開這種表示是可能的和有用的。在其他情況下,這或者是無用的(就像列表一樣,它們是內部Python對象內部指針的數組),或者完全不可能(就像內部哈希表一樣,這些內部哈希表具有相當複雜的結構,因此不能表示爲單個「緩衝」)。 – user4815162342
另請參見[Guido的此解釋](http://mail.python.org/pipermail/python-dev/2000-October/009974.html)。 – user4815162342