Документация вводит в заблуждение, да.Диктовка не является последовательностью, даже если она реализует некоторые части протокола последовательности (для тестов на содержание, которые являются частью протокола последовательности.) Это особое различие в API типов Python / C вызывает сожаление, но это артефактВыбор дизайна сделан десятилетия назад.Документация отражает это различие, хотя и столь же неловко.Он пытается сказать, что для классов Python это то же самое, что и len(o)
, независимо от того, какой класс Python притворяется.Для типов C, если тип не реализует версию последовательности sizefunc, PySequence_Length()
вызовет исключение, даже не учитывая, имеет ли тип отображающуюся версию sizefunc.
Если вы не совсем увереныесть ли у вас последовательность или нет, вы должны использовать PyObject_Size()
вместо.На самом деле, очень мало причин для звонка PySequence_Length()
;обычно вы либо знаете тип (потому что вы только что создали его, и вы можете вызвать функцию длины или макрос определенного типа, например PyList_GET_SIZE()
), либо вы даже не знаете, будет ли это последовательность.