On Fri, May 10, 2013 at 5:19 PM, Jim Mooney <cybervigila...@gmail.com> wrote: > If I'm using a variable-dependent range in a for loop, is Python smart > enough to figure the variable once so I don't have to hoist it up?
At the start of a for loop, the interpreter gets an iterator for the iterable. The latter is evaluated from the expression or expression-list (tuple). If this fails it raises a TypeError. iteration is an object protocol, using the special methods __iter__ and __next__, and the exception StopIteration. An iterator maintains its own state. You can get an iterator manually with built-in iter() and step through it with built-in next(). >>> it = iter('abc') >>> type(it) <class 'str_iterator'> >>> next(it), next(it), next(it) ('a', 'b', 'c') >>> next(it) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>> it = iter(range(5)) >>> type(it) <class 'range_iterator'> >>> list(it) [0, 1, 2, 3, 4] >>> next(it) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor