我試圖用PySequence_Length
來獲取C語言中的Python字典的長度。我意識到我可以使用PyDict_Size
,但我有興趣使用更通用的函數在某些情況下。Python C-API:在字典中使用'PySequence_Length'
PyObject* d = PyDict_New();
Py_ssize_t res = PySequence_Length(d);
printf("Result : %ld\n", res);
if (res == -1) PyErr_Print();
這種失敗,並打印錯誤:
TypeError: object of type 'dict' has no len()
我的問題是:爲什麼會失敗?雖然Python字典對象不支持的協議序列,所述documentation爲PySequence_Length
說:
Py_ssize_t PySequence_Length(PyObject *o)
Returns the number of objects in sequence o on success, and -1 on failure. For objects that do not provide sequence protocol, this is equivalent to the Python expression len(o).
由於字典類型並具有__len__
屬性,並且由於表達len(d)
(其中d
是一個字典)適當地返回Python的長度,我不明白爲什麼PySequence_Length
應該在C失敗。
任何解釋?文檔不正確嗎?