我有一個python memoryview
指向一個bytes
對象,我想在這個對象上執行一些cython處理。在字節對象上獲取指向python memoryview的指針
我的問題是:
- 因爲
bytes
對象是不可寫,用Cython不允許從它構建一個類型化(用Cython)memoryview - 我不能使用指針,或者是因爲我不能讓一個指針所述memoryview開始
實施例:
在蟒蛇:
array = memoryview(b'abcdef')[3:]
地用Cython:
cdef char * my_ptr = &array[0]
失敗的消息編譯:Cannot take address of Python variable
cdef char[:] my_view = array
失敗,在該消息的運行時:BufferError: memoryview: underlying buffer is not writable
怎樣才能解決這個問題?
第一個問題:如何在你的Cython函數中聲明'array'參數? –
@PierredeBuyl我把它作爲一個python對象傳入。像這樣:Cython:'def myfunc(arr):pass' – ARF
嗨,經過一些文檔查找和谷歌搜索,如果你收到的所有內容都是內存視圖,看起來很難獲得讀寫訪問。你應該提到memoryview是如何在第一個地方創建的。如果你可以得到一個'Py_buffer'結構,這可能會有所幫助。 https://docs.python.org/3.5/c-api/buffer.html –