gpt4 book ai didi

python - 我们如何从被调用者修改调用者中的值?

转载 作者:行者123 更新时间:2023-12-01 00:26:44 27 4
gpt4 key购买 nike

我们如何从被调用者修改调用者中的值?

下面的代码中,为什么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

关于python - 我们如何从被调用者修改调用者中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58522009/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com