"spir" <denis.s...@free.fr> wrote

x = 1

def f():
 n = 1
 def g0(a):
   print (x + n + a)
 return g0


I'm surprised the snippet below works as expected (py 2.6) without any trick:

I'm not sure how else it could work.
x is a global name so the function must reference it.
n is a local name so it musdt evaluate it (it will disappear otherwise)
a is a parameter delivered at run time.

This means a (real) closure is built for g0, or what?
Thought I would need instead to use the old trick of pseudo default-parameters:

def f():
 n = 1
 def g0(a, n=n, x=x):
   print (x + n + a)
 return g0

I did wonder if you would need n=n but I didn't think you would need x=x.

Its an interesting example and I confess I don't fully understand how Python's
naming/reference rules are working here.

to let the inner func g0 "remember" outer values.
Why is this idiom used, then? Has something changed, or do I miss
a relevant point?

I thought you might need to do it if n had been a parameter of f()... but
having tried it no, it works as above.

I look forward to the explanation.

Alan G.

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to