很明显h(x,y,z)= f(x,y)* g(y,z)是什么意思。我想在Python中使用一个类似的设备,例如:
fmul(f1(x,y),f2(y,z)) -> lambda x,y,z: f1(x,y)*f2(y,z)
fmul(f1(x,y),f2(z,y)) -> lambda x,y,z: f1(x,y)*f2(z,y)
等通用工作,具体取决于参数名称。当然,它不会像上面的伪代码那样工作,因为Python将首先尝试评估f1和f2调用,并且由于这些将使用一些变量名而不是值,因此会引发NameError。有没有办法将这些变量名称不变地传递给lambda的定义,以便我得到一个具有明确定义的参数顺序的正确函数对象?我想用像Lisp这样的语言,用宏和符号来做相对容易,但是如何用Python做呢?我找到的最接近解决方案的方法是使用inspect模块来检索函数参数,但这些是字符串,所以我必须通过连接字符串然后评估它来组成lambda表达式。是不是有更简单的方法?
答案 0 :(得分:1)
将函数作为参数传递:
def fmul(f1, f2):
return (lambda x,y,z: f1(x,y)*f2(y,z))
答案 1 :(得分:0)
如果您事先知道参数名称(如果您可以重新定义<script>
var myObj = ${myJsonObj};
(...)
和f1
),则可以使用关键字参数来完成,而不会与f2
混淆:
inspect