From: monkeys paw on
On 4/7/2010 1:08 PM, Peter Pearson wrote:
> On Tue, 06 Apr 2010 23:16:18 -0400, monkeys paw<monkey(a)joemoney.net> wrote:
>> I have the following acre meter which works for integers,
>> how do i convert this to float? I tried
>>
>> return float ((208.0 * 208.0) * n)
>>
>>>>> def s(n):
>> ... return lambda x: (208 * 208) * n
>> ...
>>>>> f = s(1)
>>>>> f(1)
>> 43264
>>>>> 208 * 208
>> 43264
>>>>> f(.25)
>> 43264
>
> The expression "lambda x: (208 * 208) * n" is independent of x.
> Is that what you intended?
>
>

Seems i should have done this:
g = lambda x: 208.0 * 208.0 * x
g(1)
43264.0
From: Patrick Maupin on
On Apr 8, 6:06 pm, monkeys paw <mon...(a)joemoney.net> wrote:
> On 4/7/2010 1:08 PM, Peter Pearson wrote:
>
>
>
> > On Tue, 06 Apr 2010 23:16:18 -0400, monkeys paw<mon...(a)joemoney.net>  wrote:
> >> I have the following acre meter which works for integers,
> >> how do i convert this to float? I tried
>
> >> return float ((208.0 * 208.0) * n)
>
> >>>>> def s(n):
> >> ...    return lambda x: (208 * 208) * n
> >> ...
> >>>>> f = s(1)
> >>>>> f(1)
> >> 43264
> >>>>> 208 * 208
> >> 43264
> >>>>> f(.25)
> >> 43264
>
> > The expression "lambda x: (208 * 208) * n" is independent of x.
> > Is that what you intended?
>
> Seems i should have done this:
> g = lambda x: 208.0 * 208.0 * x
> g(1)
> 43264.0

Yes, but then what is the 'n' for. When you do that, you are not
using it, and it is still confusing.

Regards,
Pat
From: monkeys paw on
On 4/8/2010 7:19 PM, Patrick Maupin wrote:
> On Apr 8, 6:06 pm, monkeys paw<mon...(a)joemoney.net> wrote:
>> On 4/7/2010 1:08 PM, Peter Pearson wrote:
>>
>>
>>
>>> On Tue, 06 Apr 2010 23:16:18 -0400, monkeys paw<mon...(a)joemoney.net> wrote:
>>>> I have the following acre meter which works for integers,
>>>> how do i convert this to float? I tried
>>
>>>> return float ((208.0 * 208.0) * n)
>>
>>>>>>> def s(n):
>>>> ... return lambda x: (208 * 208) * n
>>>> ...
>>>>>>> f = s(1)
>>>>>>> f(1)
>>>> 43264
>>>>>>> 208 * 208
>>>> 43264
>>>>>>> f(.25)
>>>> 43264
>>
>>> The expression "lambda x: (208 * 208) * n" is independent of x.
>>> Is that what you intended?
>>
>> Seems i should have done this:
>> g = lambda x: 208.0 * 208.0 * x
>> g(1)
>> 43264.0
>
> Yes, but then what is the 'n' for. When you do that, you are not
> using it, and it is still confusing.
>
> Regards,
> Pat

I was going from example and looking for something useful from
the lambda feature. I come from C -> Perl -> Python (recent). I
don't find lambda very useful yet.
From: monkeys paw on
On 4/7/2010 12:15 AM, Patrick Maupin wrote:
> On Apr 6, 11:10 pm, Patrick Maupin<pmau...(a)gmail.com> wrote:
>> On Apr 6, 11:04 pm, Patrick Maupin<pmau...(a)gmail.com> wrote:
>>
>>
>>
>>> On Apr 6, 10:16 pm, monkeys paw<mon...(a)joemoney.net> wrote:
>>
>>>> I have the following acre meter which works for integers,
>>>> how do i convert this to float? I tried
>>
>>>> return float ((208.0 * 208.0) * n)
>>
>>>> >>> def s(n):
>>>> ... return lambda x: (208 * 208) * n
>>>> ...
>>>> >>> f = s(1)
>>>> >>> f(1)
>>>> 43264
>>>> >>> 208 * 208
>>>> 43264
>>>> >>> f(.25)
>>>> 43264
>>
>>> Not sure why you are returning a lambda (which is just a function that
>>> does not have a name) from an outer function.
>>
>>> A function that does this multiplication would simply be:
>>
>>> def s(n):
>>> return 208.0 * 208.0 * n
>>
>>> Regards,
>>> Pat
>>
>> I realized I didn't show the use. A bit different than what you were
>> doing:
>>
>>>>> def s(n):
>>
>> ... return 208.0 * 208.0 * n
>> ...>>> s(1)
>> 43264.0
>>>>> s(0.5)
>> 21632.0
>>>>> s(3)
>>
>> 129792.0
>>
>> I'm not sure exactly what you mean by "acre meter" though; this
>> returns the number of square feet in 'n' acres.
>>
>> Regards,
>> Pat
>
> I should stop making a habit of responding to myself, BUT. This isn't
> quite an acre in square feet. I just saw the 43xxx and assumed it
> was, and then realized it couldn't be, because it wasn't divisible by
> 10. (I used to measure land with my grandfather with a 66 foot long
> chain, and learned at an early age that an acre was 1 chain by 10
> chains, or 66 * 66 * 10 = 43560 sqft.)
> That's an exact number, and 208 is a poor approximation of its square
> root.
>
> Regards,
> Pat

You are absolutely right Pat, so here is the correct equate which also
utilizes my original question of using floats in a lambda, perfectly...

g = lambda x: 208.71 * 208.71 * x
g(1)
43559.864100000006

but truly the easiest to remember is based on your chain:

g = lambda x: 660 * 66 * x
g(1)
43560

Now back to python...
From: Steven D'Aprano on
On Thu, 08 Apr 2010 21:32:10 -0400, monkeys paw wrote:

> I was going from example and looking for something useful from the
> lambda feature. I come from C -> Perl -> Python (recent). I don't find
> lambda very useful yet.

Perhaps you feel that lambda is a special kind of object. It isn't. It's
just a short-cut for creating an anonymous function object.

f = lambda x: x+1

is almost exactly the same as:

def function(x):
return x+1

f = function
del function


The only advantages of lambda are:

(1) you can write a simple function as a one-liner; and
(2) it's an expression, so you can embed it in another expression:

list_of_functions = [math.sin, lambda x: 2*x-1, lambda x, y=1: x**y]
for func in list_of_functions:
plot(func)


The disadvantage of lambda is that you can only include a single
expression as the body of the function.

You will generally find lambdas used as callback functions, and almost
nowhere else.


--
Steven