Będziesz musiał użyć zamiast rzeczywistej funkcji, który jest importable (nie zagnieżdżony wewnątrz innej funkcji):
import cPickle as pickle
from numpy import sin, cos, array
def tmp(x):
return sin(x)+cos(x)
test = array([[tmp,tmp],[tmp,tmp]],dtype=object)
pickle.dump(test, open('test.lambda','w'))
Przedmiotem funkcja może być nadal produkowane przez ekspresję lambda
, ale tylko wtedy, gdy następnie daje wynikowy funkcyjnych samą nazwę: tylko
tmp = lambda x: sin(x)+cos(x)
tmp.__name__ = 'tmp'
test = array([[tmp, tmp], [tmp, tmp]], dtype=object)
Ze względu pickle
przechowuje moduł i nazwę obiektu funkcyjną; w powyższym przykładzie, tmp.__module__
i tmp.__name__
wskazują teraz ponownie miejsce, w którym ten sam obiekt można znaleźć ponownie, gdy zostanie on rozpakowany.
Wydaje się dziwną rzeczą do zrobienia. Jaka jest użyteczność? – Aya
@Aya lambdify w SymPy sprawia, że bardzo wygodne jest tworzenie funkcji lambda. I chcę je ocenić za pomocą Cythona. Możesz [więcej informacji znajdziesz w tym drugim pytaniu] (http://stackoverflow.com/questions/16295140/numerical-integration-over-a-matrix-functions-sympy-and-scipy) –
Cóż, ja don Coś dużo o Cythonie, ale rozwiązanie Martijna zadziała tylko wtedy, gdy Cython zaimportuje plik Pythona, w którym zdefiniowano funkcję 'tmp (x)'. – Aya