Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   Re: [Q] How to exec code object with local variables specified? (http://www.velocityreviews.com/forums/t952450-re-q-how-to-exec-code-object-with-local-variables-specified.html)

Peter Otten 09-20-2012 01:15 PM

Re: [Q] How to exec code object with local variables specified?
 
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




All times are GMT. The time now is 12:26 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.