Dovrete usare una funzione di vero e proprio, invece, uno che è importabile (non nidificato all'interno di un'altra funzione):
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'))
L'oggetto funzione potrebbe ancora essere prodotto da un'espressione lambda
, ma solo se si successivamente invia l'oggetto funzione risultante lo stesso nome:
tmp = lambda x: sin(x)+cos(x)
tmp.__name__ = 'tmp'
test = array([[tmp, tmp], [tmp, tmp]], dtype=object)
perchè pickle
memorizza solo il modulo e il nome di un oggetto funzione; nell'esempio sopra, tmp.__module__
e tmp.__name__
ora punta indietro nel punto in cui è possibile trovare nuovamente lo stesso oggetto quando si deseleziona.
fonte
2013-05-18 16:19:57
Sembra una cosa strana da fare. Qual è il caso d'uso? – Aya
@Aya lambdify in SymPy rende molto conveniente la creazione di funzioni lambda. E voglio valutarli usando Cython. Puoi [fare riferimento a quest'altra domanda per ulteriori informazioni] (http://stackoverflow.com/questions/16295140/numerical-integration-over-a-matrix-of-functions-sympy-and-scipy) –
Beh, io non So molto di Cython, ma la soluzione di Martijn funzionerà solo se è possibile per Cython importare il file Python in cui è stata definita la funzione 'tmp (x)'. – Aya