Python 设置sympy lambdify参数的默认值
我知道sympy函数可以创建一个lambda,其中包含参数Python 设置sympy lambdify参数的默认值,python,sympy,Python,Sympy,我知道sympy函数可以创建一个lambda,其中包含参数变量和body表达式,如下所示: lambdify(variables, expression) 所以 产生 lambda x, y: x**2 + y 但是我如何给一些变量提供默认值呢?得到 lambda x, y=0: x**2 + y ? 我知道我可以用像lambdify(('x','y=0'),'x**2+y')这样的字符串来实现这一点。,但我需要使用Symphy符号对象,因为我是从其他Symphy表达式中提取它们的。它使用
变量
和body表达式
,如下所示:
lambdify(variables, expression)
所以
产生
lambda x, y: x**2 + y
但是我如何给一些变量提供默认值呢?得到
lambda x, y=0: x**2 + y
?
我知道我可以用像lambdify(('x','y=0'),'x**2+y')这样的字符串来实现这一点。,但我需要使用Symphy符号对象,因为我是从其他Symphy表达式中提取它们的。它使用字符串是一个意外。lambdify的工作方式是创建表达式的字符串形式,然后求值字符串
“lambda%s:(%s)”%(','.join(map(str,args)),expr)
(实际上比一般情况稍微复杂一点,但这是基本思想)。因此,如果args是('x','y=0')
,那么它最终被插入为lambda x,y=0:…
现在,lambdify
没有一个选项来生成parameters关键字参数,因此您最好的选项是:
- 使用字符串手动创建关键字参数(您已经发现的是有效的),或者
- 用新的lambda包装lambdified函数,如
为了在一般情况下实现这一点,您可以编写一些函数,用您想要的任何逻辑创建关键字参数包装器,如lambda x, y=0: lambdify((x, y), expr)(x, y)
from functools import wraps def create_wrapped(args, expr): func = lambdify(args, expr) @wraps(func) def wrapped(*_args, **kwargs): # Write the logic here to parse _args and kwargs for the arguments as you want them return func(*actual_args) return wrapped
from functools import wraps
def create_wrapped(args, expr):
func = lambdify(args, expr)
@wraps(func)
def wrapped(*_args, **kwargs):
# Write the logic here to parse _args and kwargs for the arguments as you want them
return func(*actual_args)
return wrapped