设置默认值
问题描述:
我知道sympy的lambdify
功能可以创建参数variables
一个lambda和身体expression
这样的:设置默认值
lambdify(variables, expression)
所以
lambdify((Symbol('x'), Symbol('y')) , 'x**2 + y')
产生
lambda x, y: x**2 + y
但我如何给一些默认值的变量?得到像
lambda x, y=0: x**2 + y
?
我知道我可以用lambdify(('x', 'y=0') , 'x**2 + y')
这样的字符串来做到这一点,但是我需要使用sympy符号对象,因为我从其他sympy表达式中提取它们。
答
它使用字符串的事实是一个意外。 lambdify的工作方式是创建一个表达式的字符串形式,然后转义字符串"lambda %s: (%s)" % (', '.join(map(str, args)), expr)
(它实际上比一般情况稍复杂一些,但这是基本思想)。所以如果参数是('x', 'y=0')
,那最后插入为lambda x, y=0: ...
。
眼下lambdify
没有一个选项,以使参数关键字参数,所以你最好的选择是:
手动创建关键字参数使用字符串(你已经发现作品),或
-
包裹lambdified功能在新的λ,像
lambda x, y=0: lambdify((x, y), expr)(x, y)
要做到这一点在一般情况下,CA n个写入一些功能,创建你想要的任何逻辑关键字参数的包装,像
def create_wrapped(args, expr): func = lambdify(args, expr) @functools.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
我想我会只是转换为字符串,并使用该 –