[Python-Dev] PySequence_Check but no __len__

Ivan Pozdeev vano at mail.mipt.ru
Fri Jun 22 15:30:20 EDT 2018


On 22.06.2018 22:17, Ivan Pozdeev wrote:
> On 22.06.2018 22:07, Terry Reedy wrote:
>> On 6/22/2018 7:17 AM, Christian Tismer wrote:
>>
>>>
>>> My problem is to find out how to deal with a class which has
>>> __getitem__ but no __len__.
>>>
>>> The documentation suggests that the length of a sequence can always
>>> be obtained by len().
>>> https://docs.python.org/3/reference/datamodel.html
>>
>> It says that plainly: "The built-in function len() returns the number 
>> of items of a sequence. "
>>
>> https://docs.python.org/3/library/collections.abc.html#collections-abstract-base-classes 
>>
>>
>> says that a Sequence has both __getitem__ and __len__.
>>
>> I am surprised that a C-API function calls something a 'sequence' 
>> without it having __len__.
>>
> A practical sequence check is checking for __iter__ . An iterator 
> doesn't necessarily have a defined length -- e.g. a stream or a 
> generator.
>
Now, I know this isn't what 
https://docs.python.org/3/glossary.html#term-sequence says.
But practically, the documentation seems to use "sequence" in the sense 
"finite iterable". Functions that need to know the length of input in 
advance seem to be the minority.

-- 
Regards,
Ivan



More information about the Python-Dev mailing list