При использовании 'globals' проблема заключается в том, что он работает только для текущего модуля. Вместо того, чтобы передавать «глобальные переменные», лучше использовать встроенный setattr непосредственно в пространстве имен. Это означает, что вы можете затем повторно использовать функцию как для экземпляров, так и для модулей.
import cPickle
#
# Load if neccesary
#
def loadfile(variable, filename, namespace=None):
if module is None:
import __main__ as namespace
setattr(namespace, variable, cPickle.load(file(filename,'r')))
# From the main script just do:
loadfile('myvar','myfilename')
# To set the variable in module 'mymodule':
import mymodule
...
loadfile('myvar', 'myfilename', mymodule)
Будьте осторожны с именем модуля: основным скриптом всегда является модуль main . Если вы запускаете script.py и выполняете 'import script', вы получите отдельную копию своего кода, которая обычно не соответствует вашим ожиданиям.