On 12/08/2014 03:58 PM, Ben Finney wrote:
memilanuk <memila...@gmail.com> writes:

What I'm having trouble finding a concrete answer to is the difference
between:


lambda: some_expr

This creates a new function which expects zero parameters. The function,
when called, will return the value of ‘some_expr’.

lambda x: some_expr

This creates a new function which expects one positional parameter named
‘x’. The function, when called, will return the value of ‘some_expr’.


so in the first example in my original post:

...
lambda: update_label2('A', 100)

would this work the same? It looks as though it'd be passing the same two parameters to the same function...

lambda: 'A', 100: update_label2()


Also, in my second example:

class MyText(Text):
    def __init__(self, master, **kw):
        apply(Text.__init__, (self, master), kw)
        self.bind("<Return>", lambda e: "break")

(from the page @ http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm, if anyone cares)

I'm kind of missing what 'e' is and where its defined and what it's supposed to be passing to "break"...? The whole bind method for classes and instances is a wee bit above my pay grade right about now; but I happened to stumble upon this example when I went looking for more info on lambda :/





lambda x=some_value: some_expr

This creates a new function which expects one parameter named ‘x’, which
parameter has a default value of ‘some_value’. The function, when
called, will return the value of ‘some_expr’.


I was reading in 'Programming Python 4th ed' by Lutz and he talks about something to do with default values vs. enclosing scopes... that something like:

lambda x=x: some_expr

when evaluated inside a function loop to create buttons, etc., causes 'x' to be evaluated as the default value at the function creation time, vs. when the function is actually called. Do I have that more or less correct?

TIA,

Monte



--
Shiny!  Let's be bad guys.

Reach me @ memilanuk (at) gmail dot com

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to