繁体   English   中英

Python中许多参数的乘法函数

[英]Multiplying functions of many parameters in Python

显然,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表达式,然后进行评估。 有没有更直接的方法?

将函数作为参数传递:

def fmul(f1, f2):
    return (lambda x,y,z: f1(x,y)*f2(y,z))

如果您事先知道参数名称(并且可以重新定义f1f2 ),则可以使用关键字参数来实现,而不必与inspect混为一谈:

def f1(x, y, **kwargs):
    return x + y


def f2(z, y, **kwargs):
    return z - y


def fmul(f1, f2):
    return lambda x, y, z: f1(x=x, y=y, z=z) * f2(x=x, y=y, z=z)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM