我有一个Lambda对象,是在这个函数中创建的:
def add_url_rule(self, rule, endpoint=None, view_func=None, **options):
self.record(lambda s:
s.add_url_rule(rule, endpoint, view_func, **options))
使用 lambda 函数对象的 func_closure
,我可以访问到闭包作用域:
(<cell at 0x3eb89f0: str object at 0x2fb4378>,
<cell at 0x3eb8a28: function object at 0x3cb3a28>,
<cell at 0x3eb8a60: str object at 0x3ebd090>,
<cell at 0x3eb8b08: dict object at 0x3016ec0>)
仔细观察(每个cell
对象的cell_contents
属性),我发现:
>>> [c.cell_contents for c in func.func_closure]
['categoryDisplay',
<function indico.web.flask.util.RHCategoryDisplay>,
'/<categId>/',
{}]
那个 Lambda 函数是通过这个调用创建的:
add_url_rule('/<categId>/', 'categoryDisplay', rh_as_view(RHCategoryDisplay))
正如您所看到的,该顺序不匹配函数参数顺序或lambda内部使用参数的顺序。虽然我可以根据其类型/内容轻松找出哪个元素是什么,但我希望以更清晰的方式完成它。
因此,我的问题是:如何将其与它们的原始变量名称(或至少在函数参数的情况下是位置)关联起来?