How to pickle a lambda function?
Duncan Booth
duncan.booth at invalid.invalid
Tue Aug 11 03:42:06 EDT 2009
Terry <terry.yinzhe at gmail.com> wrote:
> I'm trying to implement something like:
>
> remote_map(fun, list)
>
> to execute the function on a remove machine. But the problem is I
> cannot pickle a lambda function and send it to the remote machine.
>
> Is there any possible way to pickle (or other method) any functions
> including lambda?
>
You can pickle any named functions that are declared at module scope.
You cannot pickle anonymous functions, methods, or functions declared
nested inside other functions. The function must be present in the same
module when you unpickle it, and if the definition has changed between
pickling and unpickling the new definition will be used (just as other
instances will use the current class definition not the one they were
pickled with).
You probably could pickle some of the components needed to create your
lambda and construct a new function from it when unpickling: try the code
object, the name of the module to be used for the globals, and default
arguments. I don't think you can pickle the closure so better make sure
your lambda doesn't need one, and be very careful to ensure that you
restore the pickle in the same version of Python otherwise the code object
might break. Best just avoid this and use named functions for anything that
needs pickling.
--
Duncan Booth http://kupuguy.blogspot.com
More information about the Python-list
mailing list