在Python中,是否可以接受函数调用模板作为参数?

时间:2019-06-26 18:38:13

标签: python python-3.x metaprogramming

作为基于jsbueno的出色答案Aspect oriented programming (AOP) in Python来改进Python中面向方面编程的语法的一部分,我想知道是否可以接受带有修饰的Python中的函数模板作为参数。

例如,能够使用未定义的&来调用foo(bar(5)),并使bar接收到表示表达式foo的对象;而不是未定义bar(5)的错误。 (然后将其用作输入,以构造一个规则来匹配传入的网络消息,该规则指示另一个节点已运行带有参数5的功能bar。)

有没有比将模板作为字符串传递并用bar进行解析更好的方法了?

1 个答案:

答案 0 :(得分:0)

我不确定,您要寻找什么,也许这会有所帮助:

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 2 3