From: monkeys paw on 8 Apr 2010 19:06 On 4/7/2010 1:08 PM, Peter Pearson wrote:> On Tue, 06 Apr 2010 23:16:18 -0400, monkeys paw 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 8 Apr 2010 19:19 On Apr 8, 6:06 pm, monkeys paw wrote:> On 4/7/2010 1:08 PM, Peter Pearson wrote: > > > > > On Tue, 06 Apr 2010 23:16:18 -0400, monkeys paw  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 8 Apr 2010 21:32 On 4/8/2010 7:19 PM, Patrick Maupin wrote:> On Apr 8, 6:06 pm, monkeys paw wrote: >> On 4/7/2010 1:08 PM, Peter Pearson wrote: >> >> >> >>> On Tue, 06 Apr 2010 23:16:18 -0400, monkeys paw 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 8 Apr 2010 23:02 On 4/7/2010 12:15 AM, Patrick Maupin wrote:> On Apr 6, 11:10 pm, Patrick Maupin wrote: >> On Apr 6, 11:04 pm, Patrick Maupin wrote: >> >> >> >>> On Apr 6, 10:16 pm, monkeys paw 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 9 Apr 2010 00:31 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 First  |  Prev  |  Next  |  Last Pages: 1 2 3 Prev: s-expression parser in pythonNext: Full of Free Entertainment