Ron_Adam wrote: > > So I didn't know I could do this: > > def foo(a1): > def fee(a2): > return a1+a2 > return fee > > fum = foo(2)(6) <------ !!!
Ah, so you did not know functions are objects just like numbers, strings or dictionaries. I think you may have been influenced by other languages where there is a concept of static declaration of functions. The last line can be better visualized as: fum = (foo(2)) (6) where foo(2) is a callable. ----------- Since a function is an object, they can be assigned (rebound) to other names, pass as parameters to other functions, returned as a value inside another function, etc. E.g.: def g(x): return x+3 h = g # <-- have you done this before? assignment of function print h(1) # prints 4 def f(p): return p # <-- function as return value p = f(h) # <-- passing a function object print p(5) # prints 8 Python's use of "def" keyword instead of the "=" assignment operator makes it less clear that functions are indeed objects. As I said before, this is something to think about for Python 3K (the future version of Python.) ------------ Function modifiers exist in other languages. Java particularly is loaded with them. public static synchronized double random() { ... } So your new syntax: @decorator(a1)(foo) def foo(): pass is a bit out of the line with other languages. -- http://mail.python.org/mailman/listinfo/python-list