[Python-Dev] Defining properties - a use case for class decorators?

Phillip J. Eby pje at telecommunity.com
Wed Oct 19 17:42:05 CEST 2005


At 07:47 PM 10/19/2005 +1000, Nick Coghlan wrote:
>Phillip J. Eby wrote:
> > Note that a "where" or "given" statement like this could make it a
> > little easier to drop lambda.
>
>I think the "lambda will disappear in Py3k" concept might have been what
>triggered the original 'where' statement discussion.
>
>The idea was to be able to lift an arbitrary subexpression out of a function
>call or assignment statement without having to worry about affecting the
>surrounding namespace, and without distracting attention from the original
>statement. Basically, let a local refactoring *stay* local.
>
>The discussion wandered fairly far afield from that original goal though.
>
>One reason it fell apart was trying to answer the seemingly simple question
>"What would this print?":
>
>    def f():
>       a = 1
>       b = 2
>       print 1, locals()
>       print 3, locals() given:
>           a = 2
>           c = 3
>           print 2, locals()
>       print 4, locals()

It would print "SyntaxError", because the 'given' or 'where' clause should 
only work on an expression or assignment statement, not print.  :)

In Python 3000, where print is a function, it should print the numbers in 
sequence, with 1+4 showing the outer locals, and 2+3 showing the inner 
locals (not including 'b', since b is not a local variable in the nested 
block).

I don't see what's hard about the question, if you view the block as syntax 
sugar for a function definition and invocation on the right hand side of an 
assignment.

Of course, if you assume it can occur on *any* statement (e.g. print), I 
suppose things could seem more hairy.



More information about the Python-Dev mailing list