[Python-ideas] Consider making enumerate a sequence if its argument is a sequence
Akira Li
4kir4.1i at gmail.com
Thu Oct 1 07:39:51 CEST 2015
Andrew Barnert via Python-ideas
<python-ideas at python.org> writes:
> On Sep 30, 2015, at 19:04, Akira Li <4kir4.1i at gmail.com> wrote:
>>
>> Random832 <random832 at fastmail.com> writes:
>>
>>> Akira Li <4kir4.1i at gmail.com> writes:
>>>
>>>> Andrew Barnert via Python-ideas
>>>> <python-ideas at python.org> writes:
>>>> ...
>>>>> (The fact that we don't have a term for "non-iterator iterable", and
>>>>
>>>> All iterators are iterable but some iterables are not iterators.
>>>>
>>>> If your code accepts only iterators then use the term *iterator*.
>>>> Otherwise the term *iterable* could be used.
>>>>
>>>> It is misleading to use *iterable* if your code only accepts iterators.
>>>>
>>>> If an iterable is an iterator; It is called *iterator*. The term
>>>> *iterable* implies that some instances are not iterators.
>>>
>>> There are three (well, three and a half) kinds of code that consume
>>> iterables, how would you describe each simply?
>>>
>>> 1. Does not call iter, simply calls next. Therefore cannot consume a
>>> non-iterator iterable.
>> iterator
>>
>>> 2. Calls iter, but can accept an iterator (e.g. only goes through it
>>> once)
>> iterable
>>
>>> 3. Cannot accept an iterator (goes through it twice, or permanently
>>> stores a reference to it, etc)
>> neither
>>
>> *iterable* is an object that you can pass to iter() to get *iterator*.
>> An iterable does not guarantee that it yields the same items twice.
>
> And this is exactly the problem. We don't have any way to simply
> describe this thing. Hence all the confusion in this thread, and in
> similar discussions elsewhere, and even in the docs (e.g., describing
> dict views as sequences and then going on to explain that they're not
> actually sequences).
Use *iterable* instead of "non-iterator iterable" -- it is that simple.
"dict views" seems a pretty good term for dict views.
Are you suggesting to call dict views "non-iterator iterable"?
I don't see that it says more than that all dict views are iterable.
It seems there is a bug in the glossary: the entry name should be "dict
views", not just "view" that is too generic for the description.
I've submitted a patch http://bugs.python.org/issue25286
> The fact that it took your previous message four paragraphs without
> inventing a new term, to say what I said in one sentence with a new
> term, demonstrates the problem. As does the fact that my attempted new
> term, "non-iterator iterable", is sufficiently ugly and not
> intuitively helpful enough that you felt the need to expand on it for
> four paragraphs.
I don't need 4 paragraphs to describe it:
if you need an iterator; use the term *iterator* --
otherwise use *iterable* unless you need something more specific e.g.,
*seq* name is common for generic sequences
I don't remember ever using "non-iterator iterable". "non-iterator
iterable" does not qualify as more specific. You need to introduce new
requirements to the type for that.
More information about the Python-ideas
mailing list