py3k printing generators -- not!

Terry Reedy tjreedy at udel.edu
Sun Jun 7 00:58:09 CEST 2009


samwyse wrote:
> The one thing that's killing me in Python 3000

py3.0 or py3.1, but the 'problem' you complain about has nothing to do 
with those versions in particular.

> is that every time I try to print something, it seems like I get <generator object
> <genexpr> at 0x01BAF508>.

Nor does it have anything is particular to do with generator objects. 
Str(function/class/module/and-many-others) prints similarly. Since 
forever, str(ob) == ob.__str__() == type(ob).__str__(ob).  And what you 
see above is the default template filled in for a particular object.

Built-in concrete collections over-ride the default and return a string 
with their contents because they can do that without harm other than 
possibly producing a very long string.  When the collections are large, 
one might want a custom function that instead formats a string with a 
limited number of examples and the total count.

A 3.0 range object, a virtual collection, could do that too, but since 
there is a regular pattern, it prints a condensed representation. 
Aren't you glad, actually, that range(1000000000) prints as "range(0, 
1000000000)" instead of listing the billion numbers it produces when 
iterated, as you seem to be asking for?

>  Googling only found one reference, a
> posting elsewhere by one Carl Johnson (aka carlj7,
> http://www.artima.com/forums/flat.jsp?forum=106&thread=211200#275387),

A bogus complaint that the constructor for highly specialized class str 
acts differently from those of the general collection classes set, 
tuple, and list.  Str is actually not a collection class in the way that 
set, tuple, list, dict, and many others are.

Terry Jan Reedy




More information about the Python-list mailing list