Задать вопрос
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).

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

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

Похожие вопросы
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽
31 янв. 2025, в 00:16
43000 руб./за проект
30 янв. 2025, в 21:33
5000 руб./за проект
30 янв. 2025, в 19:55
7000 руб./за проект