Python问候评估当被问及不

时间:2017-09-01 08:23:59

标签: python sympy

这可以按预期工作:

>>> from sympy.parsing.sympy_parser import parse_expr 
>>> parse_expr("2**3"), parse_expr("2**3", evaluate=False)
(8, 2**3)

然而,这不是:

>>> from sympy.parsing.sympy_parser import parse_expr
>>> parse_expr("sqrt(9)"), parse_expr("sqrt(9)", evaluate=False)
(3, 3)

我希望:

(3, sqrt(9))

任何想法,为什么?

2 个答案:

答案 0 :(得分:2)

evaluate=False仅保证

  

参数的顺序将保持原样   字符串和通常会发生的自动简化   抑制。 (见例子)。

它不会阻止执行函数。

--Documentation

evaluate仅指操作符,而不是函数。

答案 1 :(得分:1)

parse_expr的evaluate标志仅影响表达式的直接评估。 .csssqrt(x)的缩写,不是解析表达式的一部分。

您可以使用x**Rational(1, 2)修饰符来阻止with evaluate(False)函数的权力评估:

sqrt

(我保留了>>> with evaluate(False): ... print(parse_expr('sqrt(9)', evaluate=False)) sqrt(9) >>> 标志,但实际上并不需要它。