如何从被调用者修改调用者中的值?
在下面的代码中,为什么exec
不修改函数bar
中变量xxxx
的值?
def foo(xcode):
print("CODE: ", xcode)
of = inspect.currentframe().f_back
of_locals = of.f_locals
of_globals = inspect.stack()[1][0].f_globals
exec(xcode, of_globals, of_locals)
del of
def bar():
x = 1
y = 2
z = 3
foo("x = y + z")
print("x == ", x)
print("x == 6? ", x == 6)
bar()
在exec
语句后添加以下行似乎有效:
ctypes.pythonapi.PyFrame_LocalsToFast(ctypes.py_object(of), ctypes.c_int(0))
因此,我们有:
import ctypes
def foo(xcode):
print("CODE: ", xcode)
of = inspect.currentframe().f_back
of_locals = of.f_locals
of_globals = inspect.stack()[1][0].f_globals
exec(xcode, of_globals, of_locals)
ctypes.pythonapi.PyFrame_LocalsToFast(ctypes.py_object(of), ctypes.c_int(0))
del of