Terry Reedy wrote:
You have been hypnotizeed by lambda. (lambda n: i+n) is a *constant
expression*, so you get 10 'equal' functions.


'hypnotized' indeed! ... ok, so let me see if I get this... the lambda defers lookup|bind of its references until such time as the lambda is 'called' and not at the time (as I thought) that the anonymous function(s) are returned?

If I'm understanding that correctly, then that means lambda is working as designed, and that there are very subtle nuances to be aware of. In my little case

   (lambda n: i + n)

... if the i goes out of scope before the anonymous function gets called then we have a problem... or if i as a reference is mutable or refers to a different object before the anonymous function is called then we have a problem?

What I am discovering is that 'yes' I can use lambda syntactically where I might not be able to code a def statement; however, if I do use it (as in a list comprehension) then I may get unexpected results if any of my lambda's references go out of scope or are mutable...(?)

Question:

What are the ramifications of making the lookup|binding happen at the time the anonymous function is 'returned' vs 'called'? Has anyone suggested this? Is this PEP-able....? Are there side-effects in the other direction?


PS Thanks Chris, Ian, Jussi, Thomas, Terry... I appreciate your teaching and patience !



kind regards,
m harris

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

Reply via email to