如何避免新的sympy.functions上的自动evalf()?

时间:2016-03-02 15:58:42

标签: python function sympy

除非我通过In [1]: import sympy as sy In [2]: class f(sy.Function): ...: def _eval_evalf(self,prec): ...: print "evalf" ...: return sy.S(1) ...: In [3]: f(1) Out[3]: f(1) In [4]: f(1)+1 Out[4]: evalf 1 + f(1) 明确要求,否则我想创建一个未评估的函数。我试过这个(按照http://docs.sympy.org/latest/modules/functions/index.html中的例子)

_eval_evalf()

可以看出,函数远离[3]中的_eval_evalf(),但它在[4]中经过了 @classmethod def _should_evalf(cls, arg): return -1 ,超越了我首先定义符号函数的目的。我也试过添加这个

_eval_evalf()

但它没有解决问题。

是否有一种简单的方法(我不熟悉类)来阻止函数f通过public static boolean isAsciiPrintable(String str) { if (str == null) { return false; } int sz = str.length(); for (int i = 0; i < sz; i++) { if (isAsciiPrintable(str.charAt(i)) == false) { return false; } } return true; } public static boolean isAsciiPrintable(char ch) { return ch >= 32 && ch < 127; } }

1 个答案:

答案 0 :(得分:0)

您的echo($result)会阻止该功能自动评估。您_should_evalf的结果是1 + f(1),而不是1 + f(1)

当函数需要知道表达式的数值时,在其他地方调用

2。您可以引发异常或使用_eval_evalf查看调用import traceback; traceback.print_stack()的位置。