local variable 'a' referenced b
Dave Angel
d at davea.name
Wed Oct 3 02:08:41 EDT 2012
On 10/03/2012 01:54 AM, Demian Brecht wrote:
> On 12-10-02 07:26 PM, Dave Angel wrote:
>>
>> if you're stuck with Python2.x, you can use a mutable object for a, and
>> mutate it, rather than replace it. For example,
>>
>>
>> def foo():
>> a = [3]
>> def bar():
>> b=2
>> a.append(b) #this mutates a, but doesn't assign it
>> print (a)
>> a[0] += b #likewise, for a number within the list
>> print (a)
>> bar()
>>
>> That should work in either 2.x or 3.2
>>
>
> Alternatively, you can restructure your code by simply adding a
> parameter to bar(). Nice thing about this is that if you ever move
> bar() out into another module, then you don't have to worry about
> documenting the side effects on 'a' so users (including yourself)
> aren't confused later:
>
> >>> def foo():
> ... a = 1
> ... def bar(n):
> ... b = 2
> ... return n + b
> ... a = bar(a)
> ... print a
> ...
> >>> foo()
> 3
>
>
One problem with short examples is they mask the reason for the code to
be structured that way. I assumed that the OP was really talking about
a closure, and that sharing that variable was deliberate. I seldom
write nested functions otherwise.
--
DaveA
More information about the Python-list
mailing list