Makoto Kuwata wrote: > Is it possible to run code object with local variables specified? > I'm trying the following code but not work: > > def fn(): > x = 1 > y = 2 > localvars = {'x': 0} > exec(fn.func_code, globals(), localvars) > print(localvars) > ## what I expected is: {'x': 1, 'y': 2} > ## but actual is: {'x': 0} > > Python: 2.7.3
>>> loc = {} >>> exec("x = 1; y = 2", globals(), loc) >>> loc {'y': 2, 'x': 1} However, this won't work with the code object taken from a function which uses a different a bytecode (STORE_FAST instead of STORE_NAME): >>> import dis >>> def f(): x = 1 ... >>> dis.dis(f) 1 0 LOAD_CONST 1 (1) 3 STORE_FAST 0 (x) 6 LOAD_CONST 0 (None) 9 RETURN_VALUE >>> dis.dis(compile("x=1", "<nofile>", "exec")) 1 0 LOAD_CONST 0 (1) 3 STORE_NAME 0 (x) 6 LOAD_CONST 1 (None) 9 RETURN_VALUE -- http://mail.python.org/mailman/listinfo/python-list