Here's how these terms are defined in the glossary in the official Python documentation.
iterable
An object capable of returning its members one at a time. Examples of
iterables include all sequence types (such as list
, str
, and
tuple
) and some non-sequence types like dict
, file
objects, and
objects of any classes you define with an __iter__()
method or with
a __getitem__()
method that implements Sequence semantics.
Iterables can be used in a for loop and in many other places where a
sequence is needed (zip()
, map()
, …). When an iterable object is
passed as an argument to the built-in function iter()
, it returns an
iterator for the object. This iterator is good for one pass over the
set of values. When using iterables, it is usually not necessary to
call iter()
or deal with iterator objects yourself. The for
statement does that automatically for you, creating a temporary
unnamed variable to hold the iterator for the duration of the loop.
See also iterator, sequence, and generator.
iterator
An object representing a stream of data. Repeated calls to the
iterator’s __next__()
method (or passing it to the built-in function
next()
) return successive items in the stream. When no more data are
available a StopIteration
exception is raised instead. At this
point, the iterator object is exhausted and any further calls to its
__next__()
method just raise StopIteration
again. Iterators are
required to have an __iter__()
method that returns the iterator
object itself so every iterator is also iterable and may be used in
most places where other iterables are accepted. One notable exception
is code which attempts multiple iteration passes. A container object
(such as a list
) produces a fresh new iterator each time you pass it
to the iter()
function or use it in a for loop. Attempting this with
an iterator will just return the same exhausted iterator object used
in the previous iteration pass, making it appear like an empty
container.
More information can be found in Iterator Types.
generator
A function which returns a generator iterator. It looks like a normal
function except that it contains yield
expressions for producing a
series of values usable in a for
-loop or that can be retrieved one
at a time with the next()
function.
Usually refers to a generator function, but may refer to a generator
iterator in some contexts. In cases where the intended meaning isn’t
clear, using the full terms avoids ambiguity.
generator iterator
An object created by a generator function.
Each yield
temporarily suspends processing, remembering the location
execution state (including local variables and pending
try
-statements). When the generator iterator resumes, it picks-up
where it left-off (in contrast to functions which start fresh on every
invocation).