代码之家  ›  专栏  ›  技术社区  ›  Mark Green

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

  •  0
  • Mark Green  · 技术社区  · 5 年前

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

    例如,能够打电话 foo(bar(5)) 具有 bar 未定义,并且 foo 接收表示表达式的对象 bar(5) ;而不是 酒吧 未定义。(然后,这将被用作输入,以构造一个规则来匹配传入的网络消息,该消息指示另一个节点已运行该功能 酒吧 使用参数5。)

    有没有比将模板作为字符串传递并用语法分析更好的方法呢 ast ?

    0 回复  |  直到 5 年前
        1
  •  0
  •   lmielke    5 年前

    我不太清楚,你在找什么,也许这会有帮助:

    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