Найти - Пользователи
Полная версия: Сгенерировать lambda-функцию
Начало » Python для экспертов » Сгенерировать lambda-функцию
1
python-er
Имеется словарь, необходимо сгенерировать на его основе некоторую lambda-функцию, например вида:

{'a.x': 3, 'b.x': 4, 'b.y': 5, }

lambda a, b: (a.x, b.x, b.y)
Похоже, что это должен делать types.CodeType, но не нахожу достойного описния КАК.
Андрей Светлов
AST -> compile -> code object -> function object
python-er
Да. Но в types.CodeType получаю

lambda a, b: (a.x, a.x, a.y)
И не могу найти описания того, как заставить types.CodeType соединять атрибуты с вторым аргументом.
python-er
вот сам код и результат:

co = CodeType(1, 1, 2, 67, ''.join(map(chr, co)),
(None, 3, 4, 5), ('', 'x', 'x', 'y'), ('a', 'b'), '', '<lambda>', 1, '')

есть так: "lambda a, b: (a.x == 3) and ((a.x == 4) and (a.y == 5))"
надо так: "lambda a, b: (a.x == 3) and ((b.x == 4) and (b.y == 5))"
python-er
Нашел.

За соединение аргументов отвечает второй байт (переменная idx) в каждой группе “co”:

      co += [124, idx, 0,
105, i, 0,
100, i, 0,
106, 2, 0,
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB