Можно ли в Python принять шаблон вызова функции в качестве параметра? - PullRequest
0 голосов
/ 26 июня 2019

Как часть улучшения синтаксиса для Аспектно-ориентированного программирования в Python на основе превосходного ответа jsbueno: Аспектно-ориентированное программирование (AOP) в Python , мне было интересно, возможно ли принять шаблон функциив качестве параметра в Python с любым украшением.

Например, возможность вызывать foo(bar(5)) с bar undefined и foo получить объект, представляющий выражение bar(5);а не ошибка, что bar не определено.(Затем он будет использоваться в качестве входных данных для построения правила для сопоставления входящих сетевых сообщений, указывающего, что другой узел запустил функцию bar с параметром 5.)

Есть ли лучший способ сделать это, чем передатьшаблон в виде строки и синтаксический анализ с ast?

1 Ответ

0 голосов
/ 26 июня 2019

Я не совсем уверен, что вы ищете, может быть, это поможет:

def decorator(f):
    def wrapper(*args, **kwargs):
        print("f in wraper with: {}".format(f.__defaults__))
        return f(*args, **kwargs)
    return wrapper

funcs = {}
fdefaults = [1, 2, 3]
code = """def myfunc(x={}): return print("f returning:", *x)""".format(fdefaults)

exec(code, {}, funcs)
myfunc = decorator(funcs["myfunc"])
myfunc()

выводит: f в обертке с: ([1, 2, 3],) f возвращая: 1 23

...