尝试编写一个带有默认sympy符号的python函数

问题描述 投票:0回答:1

我正在尝试编写一个具有默认值 sympy 符号的函数,但没有得到我所期望的结果。

这是我的代码

import sympy as sy
def addtwo(y = sy.symbols('y', reals = True)):
    return y + 2

y = sy.symbols('y')
x = addtwo()
print(type(x))
print(x)
print(x.subs(y,1))

有输出

<class 'sympy.core.add.Add'>
y + 2
y + 2

但是,代码

y = sy.symbols('y')
x = addtwo(y)
print(x)
print(x.subs(y,1))

给出预期的输出

y + 2
3
python function sympy
1个回答
0
投票

考虑这两个符号:

y1 = sy.symbols('y')
y2 = sy.symbols('y')
。尽管它们是在不同时间创建的,但它们是平等的:它们具有相同的名称和相同的假设(在本例中没有,它们只是复杂的符号)。现在考虑
y3 = sy.symbols('y', real=True)
,它具有相同的名称但不同的假设。所以
y3
y1, y2
不同。

回到第一个示例,替换不起作用,因为您在函数内部创建的符号与您在外部创建的符号不同。换句话说,您在外部创建的符号不包含在表达式中。

因为您正在处理仅包含一个符号的表达式,所以一种可能的解决方案是从符号表达式中包含的符号集中检索它,如下所示:

import sympy as sy
def addtwo(y = sy.symbols('y', reals = True)):
    return y + 2

x = addtwo()
# .free_symbols returns a set of symbols contained in the symbolic expression
my_y = x.free_symbols.pop()
print(type(x))
print(x)
print(x.subs(my_y,1))
© www.soinside.com 2019 - 2024. All rights reserved.