【发布时间】:2019-06-26 18:38:13
【问题描述】:
基于 jsbueno 的出色回答:Aspect oriented programming (AOP) in Python,作为改进 Python 中面向切面编程语法的一部分,我想知道是否可以在 Python 中接受函数模板作为带有任何修饰的参数。
例如,能够调用 foo(bar(5)) 且 bar 未定义,并让 foo 接收表示表达式 bar(5) 的对象;而不是 bar 未定义的错误。 (然后,这将用作输入来构造一条规则,以匹配传入的网络消息,指示另一个节点已运行函数 bar,参数为 5。)
有没有比将模板作为字符串传递并使用ast 解析它更好的方法?
【问题讨论】:
-
你想达到什么目的?当
bar未定义时,函数foo()会做什么? -
不确定这是否是您在不了解更多上下文的情况下要查找的内容,但您不能只接受
bar作为封闭函数的参数,然后传入您想要的任何函数有用吗? -
这对我来说听起来是个坏主意。使用这样的语法,您必须始终知道哪些函数实际存在(如
foo),哪些是伪函数(如bar)。如果您稍后定义bar方法,那么您的旧代码可能突然停止工作 - 或者至少它会变得模棱两可。现在可能看起来很方便,但当你真正必须使用它时...... -
我不介意是否有一些注释可应用于语法以表明这一点(但理想情况下不仅仅是将其设为字符串)
标签: python python-3.x metaprogramming