Mam obiekt lambda, który jest tworzony w tej funkcji:Jak odwzorować wpisy func_closure na nazwy zmiennych?
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))
Korzystanie func_closure
obiektu funkcji lambda mogę uzyskać dostęp do zakresu zamknięcia funkcji lambda:
(<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>)
się bliżej (w atrybucie cell_contents
każdego obiektu cell
) pokazuje mi tak:
>>> [c.cell_contents for c in func.func_closure]
['categoryDisplay',
<function indico.web.flask.util.RHCategoryDisplay>,
'/<categId>/',
{}]
że La Funkcja MBDA został stworzony przez tego zaproszenia:
add_url_rule('/<categId>/', 'categoryDisplay', rh_as_view(RHCategoryDisplay))
Jak widać, kolejność nie odpowiada kolejności argument funkcji lub kolejności, w której argumenty są używane wewnątrz lambda. Chociaż mogłem łatwo stwierdzić, który element jest oparty na jego typie/treści, chciałbym to zrobić w bardziej przejrzysty sposób.
Moje pytanie brzmi: jak mogę powiązać je z ich oryginalnymi nazwami zmiennych (lub co najmniej pozycjami w przypadku argumentów funkcji)?
Wygląda argumentów kluczowych podejmowane są pierwsze, następnie pozycje, a następnie catch-all. –
Czy jest to testowane w Pythonie 2 lub 3? –
Używam Pythona 2.7, ale musi on obsługiwać wersje 2.6 i 2.7. Nie sądzę jednak, aby istniały jakiekolwiek istotne zmiany między tymi dwiema wersjami. – ThiefMaster