Python Sympy:使用sympify将自定义函数缩减为字符串?

Python Sympy:使用sympify将自定义函数缩减为字符串?,python,sympy,Python,Sympy,是否有包括自定义方法的sympify()字符串的解决方案? Sympy具有美丽的功能sympify 它可以将字符串缩减为sympy函数和缩减所有表达式。很好 它允许添加“可合并”的函数作为类 这是官方的例子 from sympy import Matrix, sympify class MyList1(object): def __iter__(self): yield 1 yield 2 return def __getit

是否有包括自定义方法的sympify()字符串的解决方案?

Sympy具有美丽的功能
sympify

  • 它可以将字符串缩减为sympy函数缩减所有表达式。很好
  • 它允许添加“可合并”的函数作为类
这是官方的例子

from sympy import Matrix, sympify

class MyList1(object):
    def __iter__(self):
        yield 1
        yield 2
        return
    def __getitem__(self, i): return list(self)[i]
    def _sympy_(self): return Matrix(self)


local_dict= {"MyList1": MyList1}
print(sympify(MyList1()))    # Matrix([[1], [2]])
print(sympify('MyList1()'))  # MyList1()
print(sympify('MyList1()', locals=local_dict))  # <__main__.MyList1 object at 0x0000000006D0AA20>
从sympy导入矩阵,sympify
类MyList1(对象):
定义(自我):
收益率1
收益率2
返回
定义(self,i):返回列表(self)[i]
定义(自我):返回矩阵(自我)
local_dict={“MyList1”:MyList1}
打印(sympify(MyList1())#矩阵([1],[2]]))
打印(sympify('MyList1()')#MyList1()
打印(sympify('MyList1()',locals=local_dict))#
最后两行不能通过sympify来减少-我们的类在对字符串进行sympify时显然是未知的。把课堂变成“本地人”对我来说不起作用

是否有减少字符串的解决方案


  • 不适合我
  • 没有解决
  • 另外:在中,类类型是id
    Function
    ,而不是
    Object
    。用哪一个

我认为它满足了您的要求……MyList1没有打印方法,但数据在那里:

>>> list(sympify('MyList1()', locals=local_dict))
[1, 2]

我认为这是症状的一种错误。基本上,当它从字符串构造对象时,它不会调用
\u sympy
。您可以通过两次调用
sympify()
来解决这个问题,比如
sympify(sympify('MyList1()',locals=local_dict))
。在正常操作下,sympify()应该是幂等的,所以这样做没有害处

我打开了这个。