我试图编写一个小函数来获取一个变量名,检查它是否存在,如果没有,就从一个文件(使用pickle)将其加载到全局命名空间。在
我试着在一个文件中使用这个:
import cPickle
#
# Load if neccesary
#
def loadfile(variable, filename):
if variable not in globals():
cmd = "%s = cPickle.load(file('%s','r'))" % (variable, filename)
print cmd
exec(cmd) in globals()
但是它不起作用-变量没有被定义。我做错什么了?在
使用“globals”有一个问题,它只适用于当前模块。与其到处传递'globals',更好的方法是直接在命名空间上使用'setattr'内置。这意味着您可以在实例和模块上重用该函数。在
注意模块名:主脚本始终是modulemain。如果你在跑步脚本.py而“导入脚本”你会得到一个单独的代码副本,这通常不是你想要的。在
你总是可以完全避开exec:
编辑:当然,这只会将全局变量加载到当前模块的全局变量中。在
如果要将这些内容加载到另一个模块的全局变量中,最好将它们作为参数传入:
^{pr2}$相关问题 更多 >
编程相关推荐