This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Enumerate() function or class?
Type: enhancement Stage: resolved
Components: Documentation Versions: Python 3.11, Python 3.10, Python 3.9, Python 3.8, Python 3.7, Python 3.6
process
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: rhettinger Nosy List: Sanmitha Sadhishkumar, docs@python, rhettinger, steven.daprano
Priority: normal Keywords:

Created on 2021-09-09 14:36 by Sanmitha Sadhishkumar, last changed 2022-04-11 14:59 by admin. This issue is now closed.

Messages (3)
msg401487 - (view) Author: Sanmitha (Sanmitha Sadhishkumar) Date: 2021-09-09 14:36
I was learning about enumerate(). While learning, when I used,

>>>help(enumerate)

Help on class enumerate in module builtins:

class enumerate(object)
| enumerate(iterable, start=0)
|
| Return an enumerate object.
|
| iterable
| an object supporting iteration
|
| The enumerate object yields pairs containing a count (from start, which
| defaults to zero) and a value yielded by the iterable argument.
|
| enumerate is useful for obtaining an indexed list:
| (0, seq[0]), (1, seq[1]), (2, seq[2]), …
|
| Methods defined here:
|
| getattribute(self, name, /)

| Return getattr(self, name).
|
| iter(self, /)
| Implement iter(self).
|
| next(self, /)
| Implement next(self).
|
| reduce(…)
| Return state information for pickling.

Static methods defined here:
new(*args, **kwargs) from builtins.type
Create and return a new object. See help(type) for accurate signature.

Even when I gave as,

>>>enumerate
<class ‘enumerate’>

But, when I checked the documentation in the official website of python, www.python.org for enumerate()

Here : https://docs.python.org/3/library/functions.html#enumerate

It showed that enumerate() is a function which violated the information shown by help().

I couldn’t get whether enumerate() is a class or a function. Anyone please help me out of this please…

By the way, I had python 3.8.3. I even checked in python 3.6 and 3.7.10.
msg401494 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2021-09-09 16:31
In pure python, generators are implemented as functions.  In CPython, the only way to implement them is as a class.  From a user's point of view, enumerate(), map(), zip(), and filter() are used like a functions (they doesn't have non-dunder methods).  Accordingly, they don't have class markup in the docs even though technically they are classes.  The docs are mostly consistent in this regard and have opted for the presentation that tends to be the most helpful to users.
msg401546 - (view) Author: Steven D'Aprano (steven.daprano) * (Python committer) Date: 2021-09-10 02:42
Thank you Raymond for the explanation. I didn't realise that there was a technical reason why built-in generators had to be implemented as classes in CPython.

Sanmitha's question was already discussed answered here:

https://discuss.python.org/t/enumerate-function-or-class/10504/1
History
Date User Action Args
2022-04-11 14:59:49adminsetgithub: 89317
2021-09-10 02:42:22steven.dapranosetnosy: + steven.daprano
messages: + msg401546
2021-09-09 16:31:34rhettingersetstatus: open -> closed

assignee: docs@python -> rhettinger

nosy: + rhettinger
messages: + msg401494
resolution: not a bug
stage: resolved
2021-09-09 14:36:38Sanmitha Sadhishkumarcreate