kuraga333
@kuraga333
Программист, аналитик

Как «хешировать» код функции в Python?

Делаю (велосипедный) кеш вызовов функций (memoizing) в Python 3. Одна из подзадач - хешировать функции (имеется ввиду, код функций).

Надо хешировать обычные функции:
def f(a):
    return a > 0

А также производные,
another_func = conjunction(f, g)
полученные с помощью
import functools
def conjunction(*funcs):
    def conjunct(*args, **kwargs):
        return functools.reduce(lambda total_result, next_function: total_result and next_function(*args, **kwargs), funcs, True)
    return conjunct


Решил использовать f.__code__.co_code, но не учитываются вызываемые в функции функции. Также есть подозрение (не подтвержденное), что даже при неизменности функции, меняется f.__code__.co_code (возможно, при очистке внутреннего кеша Python).

Подскажите что-нибудь, пожалуйста? Может есть библиотека для этого (я не нашел)? Спасибо.
  • Вопрос задан
  • 228 просмотров
Пригласить эксперта
Ответы на вопрос 1
longclaps
@longclaps
Я бы не заморачиваясь лепил сигнатуру сгенерённой функции, прямо строкой. У вас одна-едиственая фабрика - conjunction, есть, допустим, набор первичных функций - a(...), b(...) и c(...), ну запихните им в докстринг "a", "b", "c", а в conjunction присваивайе докстрингу конкатенцию. И в отладке будет что почитать. Да и для нескольких разных фабрик придумаете.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы