Best way to pickle functions
Aaron Scott
aaron.hildebrandt at gmail.com
Fri Apr 3 13:50:33 EDT 2009
> Pickling the source code is much sturdier. It's very unlikely that
> the same code runs differently in different interpreters. It's much
> more likely that the same code runs the same, or not at all.
Okay, I've run into another problem. I've saved the code to a string,
so I can call it up when I need it. I want to keep these functions all
together, though, so I'm pushing them into a dictionary when I execute
it. It seems like when I put it in a dictionary, though, it messes up
the scope of the functions contained within. For example:
import cPickle
def Main():
holder = {}
functiontest = "def PickleTest():\n\tprint cPickle"
exec functiontest in holder
print holder["PickleTest"]()
Main()
... produces:
Traceback (most recent call last):
File "pickletest.py", line 11, in <module>
Main()
File "pickletest.py", line 9, in Main
print holder["PickleTest"]()
File "<string>", line 2, in PickleTest
NameError: global name 'cPickle' is not defined
Is there any way to do this so that the functions have access to the
higher scope?
Thanks.
More information about the Python-list
mailing list