我使用Sympy来计算用户提供的符号表达式,但是除法运算符的行为与其他任何数学运算符不同。当用重写运算符对对象求值时,我得到了加法、减法和乘法的预期结果,而不是除法。下面的代码说明了我的问题:import sympy
import numpy
class NewMath(int):
def __add__(self, other):
print "Adding!"
return
def __sub__(self, other):
print "Subtracting!"
return
def __mul__(self, other):
print "Multiplying!"
return
def __div__(self, other):
print "Dividing!"
return
three = NewMath(3)
four = NewMath(4)
three + four
three - four
three * four
three / four
# Override sympys default math
func_map = {'+':NewMath.__add__,
'/':NewMath.__div__}
lambda_args = [sympy.Symbol(arg) for arg in ['three', 'four']]
print "Now sympy math:"
lambda_addition = sympy.lambdify(lambda_args, sympy.Symbol('three') + sympy.Symbol('four'), modules=func_map)
lambda_addition(three, four)
lambda_subtraction = sympy.lambdify(lambda_args, sympy.Symbol('three') - sympy.Symbol('four'), modules=func_map)
lambda_subtraction(three, four)
lambda_multiplucation = sympy.lambdify(lambda_args, sympy.Symbol('three') * sympy.Symbol('four'), modules=func_map)
lambda_multiplucation(three, four)
lambda_division = sympy.lambdify(lambda_args, sympy.Symbol('three') / sympy.Symbol('four'), modules=func_map)
lambda_division(three, four)
输出:
^{pr2}$
我读过Sympy Docs并看到/运算符是一个常见的问题,但文档似乎只是指示除法将默认为整数除法,我看不到任何指示{}不能被重写的内容。您可以在我的示例中看到,我甚至尝试使用modules参数手动将division替换为自定义运算符,但没有成功。在
我也看到了{a2},这是否意味着我的事业没有希望了?在
我使用的是python2.7和sympy1.0