[Python-3000] Change to class construction?

Brian Harring ferringb at gmail.com
Sun Jul 8 16:07:42 CEST 2007


On Sat, Jul 07, 2007 at 01:08:15PM -0400, Terry Reedy wrote:
> 
> "Nick Coghlan" <ncoghlan at gmail.com> wrote in message 
> news:468FA01A.6040707 at gmail.com...
> | Georg is correct. A list comprehension like:
> |
> | [(x * y) for x in seq1 for y in seq2]
> |
> | expands to the following in 2.x (% prefixes the compiler's hidden
> | variables):
> |
> |   %n = []
> |   for x in seq1:
> |     for y in seq2:
> |       %n.append(x*y) # Special opcode, not a normal call
> |
> | In py3k it expands to:
> |
> |   def <anon>(outermost):
> |     %0 = []
> |     for x in outermost:
> |       for y in seq2:
> |         %0.append(x*y) # Special opcode, not a normal call
> |     return %0
> |   %n = <anon>(seq1)
> 
> Why not pass both seq1 *and* seq2 to the function so both become locals? 
> The difference of treatment is quite surprising.

I'd be curious if there is anyway to preserve the existing behaviour; 

class foo:
  some_list = ('blacklist1', 'blacklist2')
  known_bad = some_list += ('blah',)
  locals().update([(attr, some_callable) for attr in some_list])

is slightly contrived, but I use similar code quite often for method 
generation- both for tests, and standard enough objects.  Realize I 
could do the same via metaclasses, but it's an extra step and not 
nearly as easy/friendly imo.

So... anyway to preserve that trick under py3k?
~harring
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://mail.python.org/pipermail/python-3000/attachments/20070708/565e6b76/attachment.pgp 


More information about the Python-3000 mailing list