Ramashish Baranwal 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?
Why do you have this latter requirement? Will /method/ change in the outer scope before it is called in the inner scope? E.g.: def fun1(method=None): def fun2(): if not method: method = 'GET' print '%s: this is fun2' % method return method = 'POST' # Now its going to be 'POST' in fun2 fun2() To avoid this problem, you want something like this: def fun1(method=None): def fun2(method=method): if not method: method = 'GET' print '%s: this is fun2' % method return method = 'POST' # Now the preceding line has no effect on fun2 fun2() # Now method is explicitly 'POST' in fun2 fun2('POST') But a deeper question is: Why do you need to define fun2 with fun1 to begin with? def fun2(method=None): if not method: method = 'GET' print '%s: this is fun2' % method return def fun1(method=None): method = 'POST' # will be 'GET' fun2() # will be 'POST' fun2(method) Also, empty "return" statements are unnecessary if they are the last statement in a function. James -- http://mail.python.org/mailman/listinfo/python-list