Python Lambdify/评估给定参数值

Python Lambdify/评估给定参数值,python,sympy,Python,Sympy,假设我有一个符号变量(来自sympy),定义为 z = r/p * (p-c)/(r-c) 更正式地说,将其表示为z=z(p;c,r):c和r是我想要保持不变的参数,z实际上是p中的一个函数。 现在,我想为所选的c,r,计算z=z(p)——但我不想在我的sympy环境中定义它们,因为我希望其他表达式仍然将它们视为一般的未知参数 本质上,我在寻找类似的东西 my_func = lambdify(p, z(p), parameters={'r': 2, 'c': 1}) my_func(2) Ou

假设我有一个符号变量(来自
sympy
),定义为

z = r/p * (p-c)/(r-c)
更正式地说,将其表示为
z=z(p;c,r)
c
r
是我想要保持不变的参数,
z
实际上是
p
中的一个函数。 现在,我想为所选的
c
r
,计算
z=z(p)
——但我不想在我的
sympy
环境中定义它们,因为我希望其他表达式仍然将它们视为一般的未知参数

本质上,我在寻找类似的东西

my_func = lambdify(p, z(p), parameters={'r': 2, 'c': 1})
my_func(2)
Out: 1
z
Out: r/p * (p-c)/(r-c)
如何执行此类数值计算?

这可能会满足您的要求: 输出: 1.0

r*(-c+p)/(p*(-c+r))

r0*(-c0+2)/(-2*c0+2*r0)

def my_lambdify(x, y, parameters=None):
    if parameters is not None:
        try:
            ys = y.subs(parameters)
        except ValueError:
            ys = y
    else:
        ys = y
    return lambdify(x, ys)

my_func = my_lambdify(p , z, parameters={'r': 2, 'c': 3})
my_func(2)
z
my_func = my_lambdify(p , z, parameters={'r': 'r0', 'c': 'c0'})
my_func(2)