subexpressions

Steven D'Aprano steve at REMOVE.THIS.cybersource.com.au
Fri Jun 1 21:12:34 EDT 2007


On Fri, 01 Jun 2007 07:09:50 -0400, Steve Holden wrote:

>>>>> The real answer is of course: Use a function.
>>>> But what about something like
>>>>
>>>> lambda x: sin(y)+cos(y) where y=x*x
>>>>
>>>> ?
>>>> May be this could be a PEP? If there is no straight way to do this.
>>> def f(x):
>>>    y = x*x
>>>    return sin(y) + cos(y)
>>>
>>> What is not straightforward about that?
>> 
>> This code is needed once in a map, so I don't want 3+ extra lines.
>> Solution seemed so simple...
>> I always considered python as languague, where simple things do not require 
>> extensive coding.
>> Moreover, this construction is common thing in functional programming. 
>> 
>> 
> Stop thinking of three lines as "extensive coding" and your problem 
> disappears immediately.


The F-bot once suggested adding a clause to the Zen of Python about
"writing two lines of code is not a sin" or "cramming two lines of code
into one is not a virtue" (my paraphrases). 


Check the two alternatives:

def f(x):
    y = x*x
    return sin(y) + cos(y)

44 key presses, including tabs and newlines and a blank line after the
function, but excluding counting the shift key separately.

lambda x: (lambda y: sin(y) + cos(y))(x*x)

42 key presses.

Apart from the extremely minor issue of "namespace pollution", I think
that speaks for itself.



-- 
Steven.




More information about the Python-list mailing list