On Wednesday, Jan 9th 2008 at 14:01 -0000, quoth Fredrik Lundh: =>Steven W. Orr wrote: => =>> So sorry because I know I'm doing something wrong. =>> =>> 574 > cat c2.py =>> #! /usr/local/bin/python2.4 =>> =>> def inc(jj): =>> def dummy(): =>> jj = jj + 1 =>> return jj =>> return dummy =>> =>> h = inc(33) =>> print 'h() = ', h() =>> 575 > c2.py =>> h() = =>> Traceback (most recent call last): =>> File "./c2.py", line 10, in ? =>> print 'h() = ', h() =>> File "./c2.py", line 5, in dummy =>> jj = jj + 1 =>> UnboundLocalError: local variable 'jj' referenced before assignment => =>http://docs.python.org/ref/naming.html has the answer: => => "If a name binding operation occurs anywhere within a code block, => all uses of the name within the block are treated as references => to the current block."
Thanks. This helps a little. But I still don't understand something. If it's a question of a legal reference or not, I could buy it. But what's really happening is that it works if it's a read-only ref but fails if it's a write: >>> def inc(jj): ... def dummy(): ... print jj ... return dummy ... >>> f = inc(44) >>> f() 44 >>> f() 44 >>> f() 44 >>> The problem only happens if I try to modify jj. What am I not understanding? -- http://mail.python.org/mailman/listinfo/python-list