Re: [Q] How to exec code object with local variables specified?

Discussion in 'Python' started by Peter Otten, Sep 20, 2012.

  1. Peter Otten

    Peter Otten Guest

    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
    Peter Otten, Sep 20, 2012
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Hal Vaughan
    Replies:
    11
    Views:
    1,104
    Gordon Beaton
    May 22, 2006
  2. Makoto Kuwata
    Replies:
    2
    Views:
    169
    88888 Dihedral
    Sep 21, 2012
  3. Makoto Kuwata
    Replies:
    0
    Views:
    147
    Makoto Kuwata
    Sep 20, 2012
  4. Terry Reedy
    Replies:
    0
    Views:
    154
    Terry Reedy
    Sep 20, 2012
  5. Peter Otten
    Replies:
    0
    Views:
    146
    Peter Otten
    Sep 21, 2012
Loading...

Share This Page