Re: Is this a closure?

2008-08-31 Thread John Machin
On Sep 1, 9:53 am, ssecorp <[EMAIL PROTECTED]> wrote:
> A method on a class:
>
> def printSelf(self):
> def printReviews():
> for review in self.reviews:
> review.printSelf()
> print "Idnbr: ", self.idnumber, "Reviews: ", printReviews()
>

The above appears to be more or less identical in effect to:
def printSelf(self):
print "Idnbr: ", self.idnumber, "Reviews: "
for review in self.reviews:
review.printSelf()
except for spacing and more importantly the second version won't print
the gratuitous None value returned by printReviews().

What are you aiming for? If your purpose is to explore/understand
lexical scopes, I suggest that you get it right in your head in the
context of a simple non-recursive function, then /if necessary/ try to
do it in a recursive class method.

HTH,
John




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


Re: Is this a closure?

2008-08-31 Thread Chris Rebert
Yes, printReviews() is a closure. In particular, it's closing over the
variable "self", which it's getting lexically from printSelf().
- Chris

On Sun, Aug 31, 2008 at 4:53 PM, ssecorp <[EMAIL PROTECTED]> wrote:
> A method on a class:
>
> def printSelf(self):
>def printReviews():
>for review in self.reviews:
>review.printSelf()
>print "Idnbr: ", self.idnumber, "Reviews: ", printReviews()
>
> I don't have to pass an argument to printReviews because everything
> defined inside printSelf is aware of outer variables? Or is that
> wrong? If it is right, is this what a closure means?
>
> Because Python is lexically scoped right? Is lexical scope+closures =
> organized dynamic scope kind of if you get my point?
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>


-- 
Follow the path of the Iguana...
http://rebertia.com
--
http://mail.python.org/mailman/listinfo/python-list