Dear list, maybe I'm overlooking something obvious or this is not possible at all or I don't know. Please, consider the following code:
## insert here anything you like def changer(): change_i('changed_i') change_j('changed_j') def run(i='', j=''): ## insert here anything you like return i, j run() == 'changed_i', 'changed_j' Let me explain: First, changer() is kind of templating language so it should be written down in this form - however, it can change during run-time as you like. Basically, it is just ordinary python code which changes (should change) the local variables of another function, run(). Oh, and it has to be *thread-safe*. Here's what I tried and didn't work (maybe I just haven't tried hard enough): - pass i, j around: changer(i, j) and change_i(i, arg) - easiest, most obvious solution - can't do it, certainly not during writing of the code - have to preserve changer()'s form - global variable - not thread-safe - in run(), create dummy closure for changer() and call it - new.function(blah, blah, blah, dummy.func_closure) - not thread safe, i guess, and besides change_i() and change_j() would also need a such a trick - I am not sure how to alter the codeobject of changer() - new.function(new.code(... - oh my, this won't work - in run(), modify change_i() and change_j() so it actually yield-s the changes, collect them here - something like: change_i.__call__ = return yield ('changed_i', 'comes_from_changer_i()') - doesn't work, of course - update locals() - yes!! - no!! - doen't work, it's just a copy - curry, mix-in, ... - hmm.... - eval(blah, blah, locals()) - not safe, ugly - maybe? what do you think? - find out which file changer() is written in, which line it starts and ends, read that file's section, parse, edit, append the needed local variable's declarations, compile to changer_new() and changer = changer_new - there has to be something better! :) So, to wrap up, the question is: how can I pass a variable from one function to another, without writing down function's argument during coding, and still be thread-safe? I can only hope you are still with me and not very confused.... Thanks for any feedback!! -- http://mail.python.org/mailman/listinfo/python-list