Chris Hengge wrote: > I may have just missed the point to your attempt to derail this > conversation =P Ah, well, don't worry. I didn't learn of lambda until I'd been using Python for a year or more. I was trying to pass arguments to callbacks in TKinter. one of the Pythonistas (Alan, Danny, Kent) told me "Oh, that's trivial with lambda" and since then, I've tried to read up on lambda and Functional Programming in general. > However.. > > Why do all that when you can just > > str = "Hello World" > print str * 2 > > (Maybe I missed some concept that this small example doesn't accuratly > reflect) Yes, I do believe you're correct here, Chris :) I will not presume to know enough about lambda to explain it to you, but I will refer you to these articles: http://www.secnetix.de/~olli/Python/lambda_functions.hawk and Alan Gauld's tutorial, of course :) specifically, the page http://www.freenetpages.co.uk/hp/alan.gauld/tutfctnl.htm
Or browse there from the main page http://www.freenetpages.co.uk/hp/alan.gauld/ click 'functional programming' under Advanced Topics' if you want the menu frame to remain on the left of the screen. Consider this: You don't say outputstring = "Hello, World!" print outputstring because you're only using the string once, and it's not something that would look ugly all on one line. Instead, you do print "Hello, World!" An alternate example: a_list = [[a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a], [a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a], [a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a], [a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a]] print a_list would make more sense than print [[a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a], [a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a], [a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a], [a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a]] because then if you need to change the list, or use it again somewhere, you don't have to go through the pain of typing it out each time, since in the first case, you assigned it to a variable, a_list. The long and short of it is: (or more specifically, the short of it) lambda lets you define functions you don't have to bind to a name. so, supposing you have the function def call_a_function(a_function): a_function() That will call a function object, you can do something like this: def f(): sys.stdout.write("Hello, World!") call_a_function(f) or you could do call_a_function(lambda: sys.stdout.write("Hello, World!")) It's like the string example above. It's a waste to have the function definition on two lines, and the call on another line, if the function's compact enough to fit on a single line using lambda. But also note that you can't reuse the lambda function unless you store it in a variable. In this way, it's similar to the 'print "Hello, World!"' statement. I hope that helps you, Chris. -Luke _______________________________________________ Tutor maillist - [email protected] http://mail.python.org/mailman/listinfo/tutor
