我正在创建一个构造匿名方法以返回多个变量的函数的方法,例如f(x,y,z)= b。我希望用户能够通过变量的列表:Python - 由变量定义的参数的确切数量
def get_multivar_lambda(expression, variables=["x"])
我则想返回的匿名函数采取准确len(variables)
参数(无论是位置基于其列表索引或基于关键字的列表中的字符串)。我知道我可以使用*args
并检查长度,但这看起来不够雅致。
这可能吗?我该怎么做?
这里是我是如何做的一个变量(其中seval
是从模块simple_eval
)为例:
def get_lambda(expression, variable="x"):
return lambda arg: seval(expression.replace(variable, str(arg)))
而这里的我是如何做到的通过只是检查通过的arguments*
的长度:
def get_multivar_lambda(expression, variables=["x"]):
def to_return(*arguments):
if len(variables) != len(arguments):
raise Exception("Number of arguments != number of variables")
for v, a in zip(variables, arguments):
expression.replace(v, a)
return seval(expression)
return to_return
编辑:我正在从用户输入表达和变量,所以一个安全的方法来做到这一点将是最好的。
为什么静静地移除未使用的变量?这是一个失败点:我将传入一个表达式,其中包含未使用的变量,然后传递这些变量的参数,导致一个令人困惑的错误。 *忽略*未使用的变量或在未使用的变量上“提高”。 – leewz 2014-12-27 19:28:07
另外,你可以使用SymPy吗? – leewz 2014-12-27 19:30:10
好点!我稍后会解决这个问题。 – Langston 2014-12-27 19:30:13