English-like Python

Joe Strout joe at strout.net
Wed Jan 21 16:24:51 CET 2009

Aaron Brady wrote:

> Where functions are first-class objects, a bare function object isn't
> distinguishable either from its call.

That depends not on whether functions are first-class objects, but on 
the *syntax* of function invocation vs. function reference.  It just so 
happens than in Python, the syntax for the latter is the bare function 
identifier.  But it wouldn't have to be -- you could use "@foo" or 
"{foo}" or "ref foo" or (as in RB) "AddressOf foo" or any number of 
other alternatives to accomplish the same thing, and functions would 
still be first-class objects.

I'll grant that having any such syntax makes them *odd* first-class 
objects, since all other objects are referred to with a naked 
identifier, and invoked (if they are callable) with some other syntax. 
It'd be weird and inconsistent to have functions turn that around.  But, 
despite being inconsistent, it might still be sensible, based on the 
observation that we generally need to invoke methods a lot more often 
than we need to get a reference to them.

 > I'm granting that it's useful
> to return values a lot.  For example:
> a= f
> could mean either, 'a= f' or 'a= f()'.  Once again the return values
> save the day.

I think I agree (if I follow you correctly).  But then some other syntax 
would be needed for when you really mean "a=f" (i.e., make 'a' refer to 
the same function as 'f').

- Joe

More information about the Python-list mailing list