2017-09-01 2 views
2

しないように尋ねられたときこれは期待どおりに動作評価sympy:Pythonは

>>> 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

evaluate=Falseは、彼らが正常に抑え が生じる 文字列と自動簡素化していたよう

引数の順序が残ることを保証します。 (例を参照)。

機能の実行を妨げるものではありません。

--Documentation

evaluateのみオペレータに、機能しないことをいいます。

+0

任意のアイデアを防止する方法関数は実行されていませんか? – major4x

1

parse_exprへの評価フラグは、式の直接評価にのみ影響します。 sqrt(x)は、式解析の一部ではないx**Rational(1, 2)の略です。

あなたは評価からsqrt機能に力を防ぐためにwith evaluate(False)デコレータを使用することができます。

>>> with evaluate(False): 
...  print(parse_expr('sqrt(9)', evaluate=False)) 
sqrt(9) 
>>> 

(私はevaluate=Falseフラグを保ったが、それはおそらく、実際に必要ではないです)