removing list comprehensions in Python 3.0

Steven Bethard steven.bethard at gmail.com
Sun Jul 10 00:32:22 EDT 2005


Raymond Hettinger wrote:
> [Steven Bethard]
> 
>>I would hope that in Python 3.0 list comprehensions and generator
>>expressions would be able to share a large amount of implementation, and
>>thus that the speed differences would be much smaller.  But maybe not...
> 
> Looking under the hood, you would see that the implementations are
> necessarily as different as night and day.  Only the API is similar.

Necessarily?  It seems like list comprehensions *could* be implemented 
as a generator expression passed to the list constructor.  They're not 
now, and at the moment, changing them to work this way seems like a bad 
idea because list comprehensions would take a performance hit.  But I 
don't understand why the implementations are *necessarily* different. 
Could you explain?

STeVe

P.S. The dis.dis output for list comprehensions makes what they're doing 
pretty clear.  But dis.dis doesn't seem to give me as much information 
when looking at a generator expression:

py> def ge(items):
...     return (item for item in items if item)
...
py> dis.dis(ge)
   2           0 LOAD_CONST               1 (<code object <generator 
expression> at 0116FD20, file "<interactive input>", line 2>)
               3 MAKE_FUNCTION            0
               6 LOAD_FAST                0 (items)
               9 GET_ITER
              10 CALL_FUNCTION            1
              13 RETURN_VALUE

I tried to grep through the dist\src directories for what a generator 
expression code object looks like, but without any luck.  Any chance you 
could point me in the right direction?



More information about the Python-list mailing list