modifying locals

Steve Holden steve at holdenweb.com
Thu Oct 30 19:22:29 EDT 2008


John [H2O] wrote:
> I would like to write a function to write variables to a file and modify a
> few 'counters'. This is to replace multiple instances of identical code in a
> module I am writing. 
> 
> 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]))
> 
Note that this code will likely fail to execute if D[key] is some object
whose str() method does not return a valid Python expression.

>     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.
> 
Return them as a tuple, using an unpacking assignment to bind the
different elements to different names.

> Bringing up another matter... is there a better way to do this that doesn't
> use exec?
> 
It's not really obvious why you are trying to replicate the caller's
namespace inside this function. Perhaps you could explain a little more
what you are trying to achieve.

regards
 Steve
-- 
Steve Holden        +1 571 484 6266   +1 800 494 3119
Holden Web LLC              http://www.holdenweb.com/




More information about the Python-list mailing list