这可以按预期工作:
>>> 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))
任何想法,为什么?
答案 0 :(得分:2)
evaluate=False
仅保证
参数的顺序将保持原样 字符串和通常会发生的自动简化 抑制。 (见例子)。
它不会阻止执行函数。
evaluate
仅指操作符,而不是函数。
答案 1 :(得分:1)
parse_expr的evaluate标志仅影响表达式的直接评估。 .css
是sqrt(x)
的缩写,不是解析表达式的一部分。
您可以使用x**Rational(1, 2)
修饰符来阻止with evaluate(False)
函数的权力评估:
sqrt
(我保留了>>> with evaluate(False):
... print(parse_expr('sqrt(9)', evaluate=False))
sqrt(9)
>>>
标志,但实际上并不需要它。