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


--
Demian Brecht
@demianbrecht
http://demianbrecht.github.com
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to