无法更改其框架中的函数值

时间:2018-01-25 17:26:53

标签: python

在某些教育目的中,我想使用“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的值没有改变。发生了什么事?

1 个答案:

答案 0 :(得分:1)

一个框架f_locals与该框架内locals函数返回的dict相同。 warning from the locals docs也适用于f_locals

  

注意:不应修改此词典的内容;更改可能不会影响使用的本地和自由变量的值   翻译。