python 3: ошибка при сбросе / загрузке sympy lambdify-epression - PullRequest
0 голосов
/ 03 июня 2018

Я хочу сохранить / сериализовать функцию Sympy-Lambdify в файл и позже использовать / загрузить ее другой python-программой.

Случай 1 : он хорошо работает

import dill
import sympy as sp
from sympy.utilities.lambdify import lambdify

dill.settings['recurse'] = True


a,b = sp.symbols('a, b')
expr = a**2 + 2*a + 1 + b

func = lambdify((a,b), expr)

myfunc = dill.loads(dill.dumps(func))

print(myfunc)
print(type(myfunc))
print(myfunc(2,3))

вывод:

<function <lambda> at 0x00000210AA0D6598>
<class 'function'>
12

Случай 2 : возврат ошибок

import dill
import sympy as sp
from sympy.utilities.lambdify import lambdify

dill.settings['recurse'] = True


a,b = sp.symbols('a, b')
expr = a**2 + 2*a + 1 + b

func = lambdify((a,b), expr)


with open('expr', 'wb') as outf:
    dill.dump(expr, outf)

with open('expr','rb') as inf:
    myfunc= dill.load(inf)

print(myfunc)
print(type(myfunc))
print(myfunc(2,3))

Вывод:

a**2 + 2*a + b + 1
<class 'sympy.core.add.Add'>
Traceback (most recent call last):
  File "test.py", line 25, in <module>
    print(myfunc(2,3))
TypeError: 'Add' object is not callable

Может кто-топомогите мне это исправить?

Спасибо всем заранее!

1 Ответ

0 голосов
/ 03 июня 2018

вместо expr положить func в dill.dump():

with open('expr', 'wb') as outf:
    dill.dump(func, outf)

Выход

<function <lambda> at 0x7fd3015c4510>
<class 'function'>
12
...