在某些教育目的中,我想使用“inspect”模块中的函数框架。我想改变局部var外部函数的值。我得到了这个函数的框架并试图改变它的值,但什么都没发生。
为什么呢?这是简单的代码:
from inspect import getouterframes, currentframe
def foo():
frame_of_main = getouterframes(currentframe())
frame_of_main[1][0].f_locals['var'] = 1
print(frame_of_main[1][0].f_locals['var'])
def main():
var = 1337
foo()
main()
输出:1337
如您所见,框架中var的值没有改变。发生了什么事?
答案 0 :(得分:1)
一个框架f_locals
与该框架内locals
函数返回的dict相同。 warning from the locals
docs也适用于f_locals
:
注意:不应修改此词典的内容;更改可能不会影响使用的本地和自由变量的值 翻译。