Understanding closures
happyriding
happyriding at yahoo.com
Sun Aug 19 02:07:38 EDT 2007
On Aug 18, 11:03 pm, Ramashish Baranwal <ramashish.li... at gmail.com>
wrote:
> Hi,
>
> I want to use variables passed to a function in an inner defined
> function. Something like-
>
> def fun1(method=None):
> def fun2():
> if not method: method = 'GET'
> print '%s: this is fun2' % method
> return
> fun2()
>
> fun1()
>
> However I get this error-
> UnboundLocalError: local variable 'method' referenced before
> assignment
>
> This however works fine.
>
> def fun1(method=None):
> if not method: method = 'GET'
> def fun2():
> print '%s: this is fun2' % method
> return
> fun2()
>
> fun1()
>
> Is there a simple way I can pass on the variables passed to the outer
> function to the inner one without having to use or refer them in the
> outer function?
>
> Thanks,
> Ramashish
This works error free:
def fun1(x=None):
y = 10
def fun2():
print x
if not x: method = 'GET'
print '%s: this is fun2' % method
fun2()
fun1()
Python reads x from the fun1 scope. But the following produces an
error for the print x line:
def fun1(x=None):
y = 10
def fun2():
print x
if not x: x = 'GET' #CHANGED THIS LINE
print '%s: this is fun2' % method
fun2()
fun1()
Traceback (most recent call last):
File "3pythontest.py", line 8, in ?
fun1()
File "3pythontest.py", line 7, in fun1
fun2()
File "3pythontest.py", line 4, in fun2
print x
UnboundLocalError: local variable 'x' referenced before assignment
It's as if python sees the assignment to x and suddenly decides that
the x it was reading from the fun1 scope is the wrong x. Apparently,
the assignment to x serves to insert x in the local scope, which makes
the reference to x a few lines earlier an error.
More information about the Python-list
mailing list