捕获和返回功能范围

时间:2017-07-07 10:14:04

标签: python scope

问题

如何自动化函数以返回其范围内定义的所有变量?

动机

当使用Python进行科学工作时,我的脚本往往非常线性(类似算法)但很长。当与脚本交互式工作时,我想保留计算的变量以进一步探索或使用它们。

我可以跳过在脚本中使用main()函数并在全局范围内执行所有操作。但是,这将禁止像下面示例中的行为,并禁止我在执行之前从交互式python控制台修改脚本。

实施例

内部script.py

def main(c):
    a, b = 1, 2
    # long function body with lots of variables...
    return parse_scope()

在交互式控制台中:

>>> import script
>>> script.main(c=3)
{'a': 1, 'b': 2, 'c': 3}

parse_scope()捕获函数范围并将其作为字典,列表返回......

def main(c):
    a, b = 1, 2
    # long function body with lots of variables...
    return {name: eval(name) for name in dir()}

提供NameError: name 'a' is not defined

1 个答案:

答案 0 :(得分:0)

写完这个问题后,我找到了答案:

def main(c):
    a, b = 1, 2
    # long function body with lots of variables...
    return locals()

似乎可以解决问题。

我之前的示例不起作用,因为eval(expression, globals=None, locals=None)需要为abc提供范围。