Я использую маринад и укроп для следования лямбда-функции и отлично работает:
import dill
import pickle
f = lambda x,y: x+y
s = pickle.dumps(f)
или даже при использовании в классе, например:
file
foo.py
class Foo(object):
def __init__(self):
self.f = lambda x, y: x+y
file
test.py
import dill
import pickle
from foo import Foo
f = Foo()
s = pickle.dumps(f) # or s = dill.dumps(f)
но при сборке одного и того же файла в формате .pyx (foo.pyx) с использованием cython, невозможно сериализовать с помощью укропа, маринада или cpickle, появляется эта ошибка:
Трассировка (последний вызов был последним): файл "/home/amin/anaconda2/envs/rllab2/lib/python2.7/site-packages/IPython/core/interactiveshell.py", строка 2878, в run_cod exe c (code_obj, self.user_global_ns, self.user_ns) Файл "", строка 1, в файле a = pickle.dumps (c) "/home/amin/anaconda2/envs/rllab2/lib/python2.7 /pickle.py ", строка 1380, в дампах Pickler (файл, протокол) .dump (obj) Файл" /home/amin/anaconda2/envs/rllab2/lib/python2.7/pickle.py ", строка 224 , в дампе self.save (obj) Файл "/home/amin/anaconda2/envs/rllab2/lib/python2.7/pickle.py", строка 331, в сохраненных файлах Файл elf.save_reduce (obj = obj, * rv) "/home/amin/anaconda2/envs/rllab2/lib/python2.7/pickle.py", строка 425, в файле сохранения (состояния) save_reduce "/ home /amin/anaconda2/envs/rllab2/lib/python2.7/pickle.py ", строка 286, в save f (self, obj) # Вызов несвязанного метода с явным файлом self" / home / amin / anaconda2 / envs /rllab2/lib/python2.7/site-packages/dill/_dill.py ", строка 912, в файле save_module_dict StockPickler.save_dict (pickler, obj) Файл" / home / amin / anaconda2 / envs / rllab2 / lib / python2 .7 / pickle.py ", строка 655, в файле save_dict self._batch_setitems (obj.iteritems ()) Файл" /home/amin/anaconda2/envs/rllab2/lib/python2.7/pickle.py ", строка 669, в _batch_setitems save (v) File" /home/amin/anaconda2/envs/rllab2/lib/python2.7/pickle.py ", строка 317, в save self.save_global (obj, rv) Файл "/home/amin/anaconda2/envs/rllab2/lib/python2.7/pickle.py", строка 754, в save_global (obj, module, name)) PicklingError: Невозможно засолить. в 0x7f9ab1ff07d0>: он не найден как foo.lambda
файл setup.py для сборки cython
setup.py
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules=cythonize("foo.pyx"))
затем запустите в терминале:
python setup.py build_ext --inplace
Есть ли способ