作为改进Python中面向方面编程语法的一部分,基于jsbueno的优秀答案: Aspect oriented programming (AOP) in Python ,我想知道是否有可能接受一个函数模板作为Python中的一个带有任何修饰的参数。
例如,能够打电话 foo(bar(5)) 具有 bar 未定义,并且 foo 接收表示表达式的对象 bar(5) ;而不是 酒吧 未定义。(然后,这将被用作输入,以构造一个规则来匹配传入的网络消息,该消息指示另一个节点已运行该功能 酒吧 使用参数5。)
foo(bar(5))
bar
foo
bar(5)
酒吧
有没有比将模板作为字符串传递并用语法分析更好的方法呢 ast ?
ast
我不太清楚,你在找什么,也许这会有帮助:
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