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

Reply via email to