On 2007-06-21, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> def f():
> a = 12
> def g():
> global a
> if a < 14:
> a=13
> g()
> return a
>
> print f()
>
> This function raises an error. Is there any way to access the a
> in f() from inside g().
>
> I could find few past discussions on this subject, I could not
> find the simple answer whether it is possible to do this
> reference.
Python's scoping rules don't allow this. But you can 'box' the
value into a list and get the intended effect.
def f():
a = [12]
def g():
if a[0] < 14:
a[0] = 13
g()
return a[0]
You'll get better results, in Python, by using a class instances
instead of closures. Not that there's anything wrong with Python
closures, but the scoping rules make some fun tricks too tricky.
--
Neil Cerutti
--
http://mail.python.org/mailman/listinfo/python-list