On Thu, 30 Oct 2008 14:21:01 -0700, John [H2O] wrote: > I would like to write a function to write variables to a file and modify > a few 'counters'.
Are you talking about a function to generate Python source code? > This is to replace multiple instances of identical > code in a module I am writing. Surely the right way to do this is to factor out the identical code into a function, and then call the function. > This is my approach: > > def write_vars(D): > """ pass D=locals() to this function... """ > for key in D.keys(): > exec("%s = %s" % (key,D[key])) That would be better written as: for key,item in D.iteritems(): exec "%s = %s" % (key, item) exec is a statement, not a function, and doesn't require brackets. > outfile.write(...) > numcount += 1 > do this, do that... > > the issue is that at the end, I want to return outfile, numcount, etc... > but I would prefer to not return them explicitly, that is, I would just > like that the modified values are reflected in the script. How do I do > this? Using global? But that seems a bit dangerous since I am using > exec. What you are actually trying to do is unclear to me. Perhaps you could try explaining better with a more concrete example? I wounder whether this might be what you are after? # start of script (untested) counter = 0 # define a counter in the module scope (global) filename = 'foo.txt' def make_vars(): global outfile, numcount # force names to be in module scope outfile = open(filename, 'w') numcount = 99 try: numcount except NameError: print "numcount doesn't exist yet, making it" make_vars() print numcount # end script But of course the above can be written much more concisely as: # start of script (untested) counter = 0 filename = 'foo.txt' outfile = open(filename, 'w') numcount = 99 print numcount # end script so I'm not really sure you're trying to do what you seem to be doing. -- Steven -- http://mail.python.org/mailman/listinfo/python-list