gpt4 book ai didi

python - 为 sympy lambdify 参数设置默认值

转载 作者:行者123 更新时间:2023-12-04 17:58:33 27 4
gpt4 key购买 nike

我知道 sympy 的 lambdify函数可以创建一个带有参数 variables 和 body expression 的 lambda,如下所示:

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)(它实际上比一般的要复杂一点,但这是基本的想法)。因此,如果 args 是 ('x', 'y=0'),则最终将作为 lambda x, y=0: ... 插入。

现在 lambdify 没有一个选项来使参数成为关键字参数,所以你最好的选择是:

  • 使用字符串手动创建关键字参数(您已经发现的方法),或者

  • 将 lambdified 函数包装在一个新的 lambda 中,例如

      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

关于python - 为 sympy lambdify 参数设置默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38250106/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com