English-like Python

Steve Holden steve at holdenweb.com
Tue Feb 3 15:53:00 EST 2009


J. Cliff Dyer wrote:
> On Tue, 2009-02-03 at 08:33 -0700, Joe Strout wrote:
>> J. Cliff Dyer wrote:
>>
>>> But what if your language allows functions to be used as first class
>>> objects?  (Mine does :))  
>>>
>>> x = Beep
>>>
>>> Does that assign the name x to the Beep object or does it assign the
>>> result of a Beep call to x?
>> It assigns the result.  To assign the name to the Beep object requires a 
>> bit of additional syntax; in RB, this would be
>>
>>   x = AddressOf Beep
>>
>>> There's no virtue in making ridiculously simple things even simpler if
>>> it makes the interesting things impossible.
>> Of course.  The goal is (or should be) to make the common things 
>> ridiculously simple, and make the uncommon things only somewhat less so. 
>>   Even in Python, it is far more common to invoke a function than to 
>> need a reference to it.  So invoking a function should be the thing that 
>> requires no extra syntax (even including "()").  Getting a reference to 
>> it, which is less common, should be the thing that requires more syntax.
>>
> 
> Except that now you have introduced an inconsistency into python.  What
> does the following mean?
> 
> my_object = MyObject()
> x = my_object
> 
> What if MyObject defines a method named __call__?
> 
> Now some objects are passed around using
> 
> x = my_object
> 
> while others require
> 
> x = AddressOf my_object
> 
> and the only way to tell which is which is to check the object for the
> presence of a __call__ method.  
> 
> This seems like a serious inconsistency to me.
> 
Time for my annual comment on the apparent requirement for DWIM-mode Python.

regards
 Steve
-- 
Steve Holden        +1 571 484 6266   +1 800 494 3119
Holden Web LLC              http://www.holdenweb.com/




More information about the Python-list mailing list