【发布时间】:2015-07-02 18:24:29
【问题描述】:
¡大家好!
我要做的是:
import pickle
exec "def f(): print 'Hi!'"
code = pickle.dumps(f)
print code
如您所见,它运行良好。
但是,为了避免定义全局变量,(例如前面代码中的 f),我想做这样的事情:
import pickle
d = {}
exec "def f(): print 'Hi!'" in d
d['f']()
code = pickle.dumps(d['f'])
print code
打印'Hi!',表示python将d['f']识别为函数,但不能pickle。
您知道如何执行此操作吗? 我认为这是因为在前一种情况下,python 知道在哪里可以找到函数(它在 '__main__' 中),但在后一种情况下,它位于位于 '__main__' 的字典中,我认为如果你能告诉 python这个函数的真正模块方向,它会起作用。
谢谢!
【问题讨论】:
-
"为了避免定义全局变量..." 如果您甚至对在全局范围内定义函数犹豫不决,您可能也会接受这个建议远的。无论如何,
d是全球性的,所以你在这里并没有真正获得太多。 -
我的意思是我不喜欢在使用命令exec()的时候,它定义了全局变量(比如我在程序中没有定义f,它是在后面定义的)使用执行)。这就是为什么我必须将所有这些变量保存在一个字典中。这是通过在dict中使用exec代码来完成的
-
我建议不要使用
exec。只需定期写您的def f():。 -
但实际上,字符串会被任何python代码替换,我不知道它是什么,这就是为什么我需要使用exec。