On Oct 29, 11:07 am, Robert Kern <[EMAIL PROTECTED]> wrote: > David Sanders wrote: > > Hi, > > > I have a script with function definitions which I load into ipython > > for interactive use. > > These functions modify a global numpy array, whose size I need to be > > able to change interactively. I thus have a script which looks like > > this: > > > from numpy import * > > > def do_resize(N): > > global a > > a = resize(a, N) > > > a = array([]) > > > N=10; do_resize(N) > > print "Length of a is: ", len(a) > > N=20; do_resize(N) > > print "Length of a is: ", len(a) > > > If I run this in ipython, using "run resize.py", it correctly outputs > > 10 and then 20. > > If I now type *interactively* N=30; do_resize(N), then the length of > > a is still 20, rather than 30 as I was hoping -- somehow I seem to be > > now dealing with a different copy of a? > > > Doing the same thing in idle works as I expect, i.e. interactively the > > size is changed to 30. > > > Could somebody please explain what's going on, and how I solve the > > problem? > > By default, %run executes the script in its own namespace. Then the > interactive > prompt's namespace gets updated with the values in that namespace. The global > statement refers to that initial namespace, not the one of the interactive > prompt. Give "%run -i resize.py" a try, though. That should execute the code > in > the interactive prompt's namespace.
Great, that's exactly what I needed! Thanks very much. David. -- http://mail.python.org/mailman/listinfo/python-list