Python has enumerate()
to iterate over objects with an index.I doubt that interpreters create a lot of int objects for the sole purpose of keeping track of where things are. The PEP page says the following, but I do not really understand what is going on under the hood:
It provides all iterables with the same advantage that iteritems() affords to dictionaries -- a compact, readable, reliable index notation.
So what is the magic here?
enumerate()
is an iterator; it only produces the index int
value on the fly; it does not produce them all up front.
You can try to read the enumobject.c
source code, but it basically can be translated to Python like this:
def enumerate(iterable, start=0):
count = start
for elem in iterable:
yield count, elem
count += 1
The yield
keyword makes this a generator function, and you need to loop over the generator (or call next()
on it) to advance the function to produce data, one yield
call at a time.
Python also interns int
values, all values between -5 and 256 (inclusive) are singletons, so the above code doesn't even produce new int
objects until you reach 257.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With