同情后的Sympy.sqrt(字符串)

时间:2017-04-25 09:05:42

标签: python python-2.7 math sympy

我在同情中遇到了方根法的问题。当我使用方法 sympify(my_str)时,我的程序返回一个带sqrt的值:

>>> y = Symbol('y', positive=True)
>>> a = 'y**2'
>>> a = sympify(a)
>>> a
y**2
>>> a = sympy.sqrt(a)
>>> a
sqrt(y**2)

当我不使用方法 sympify(my_str)时,我的程序会返回预期的值:

>>> y = Symbol('y', positive=True)
>>> a = y**2
>>> a
y**2
>>> a = sympy.sqrt(a)
>>> a
y

在我同意我的字符串之后,如何返回所需的值(使用sqrt)?

1 个答案:

答案 0 :(得分:2)

由于sympify函数使用eval,函数的默认local参数始终设置为None

  

警告请注意,此函数使用eval,因此不应使用   未经证实的输入。

如果您希望sympify获取对已定义符号的访问权限,则可以明确传递locals()字典:

>>> a = 'y**2'
>>> a = sympy.sympify(a, locals=locals())
>>> a
y**2
>>> sympy.sqrt(a)
y

或者使用更安全的缩小dict,其中只包含您需要的符号:

>>> a = 'y**2'
>>> a = sympy.sympify(a, locals={'y': y})
>>> sympy.sqrt(a)
y