我正在創建一個構造匿名方法以返回多個變量的函數的方法,例如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