Make 'def' and 'class' usable within expressions

Shane Hathaway shane at zope.com
Thu Mar 25 13:13:55 EST 2004


Glenn Andreas wrote:
> What do you do if the expression is in an "if" statement?
> 
> 
> if map(def(x,y,z),list1,list2,list3):
>    # what goes here?  The body of the function
>    # or the body of the if?  And how does the rest of it
>    # look?

Ah, that's an interesting concern.  The same applies to "for" and 
"while" statements.  This would have to be a syntax error.  Rewriting it 
isn't too difficult, though, if you're willing to create an extra variable.

     condition = map(def(x,y,z),list1,list2,list3):
         function body
     if condition:
         do stuff

> Also, limiting to "one per expression" prevents you from doing something 
> like:
> 
>    myHandlers = {
>       "click" : def(x,y):
>                      print "click at x,y"
>       "enter" : def():
>                      print "mouse entered"
>       "exit"  : def():
>                      print "mouse exited"
>    }

That example reads well, although it's odd that each function can have a 
different set of arguments.  I think you'd really want a "case" 
statement instead, but Guido doesn't seem to want that.

Shane




More information about the Python-list mailing list