在Python中乘以许多参数的函数

时间:2016-02-26 23:40:51

标签: python function

很明显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表达式。是不是有更简单的方法?

2 个答案:

答案 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