我编写了一个基本上可以简化为以下内容的脚本:
def Readhtml(a,b):
read some values from an html file
return a list of values
def ReadSQL(a,b):
Read some values from an SQL Database
return a list of values
def mainfunction(Variable):
result = Variable['Readfunction'](Variable['Parameter1'],Variable['Parameter2']) #Variable['Readfunction'] is the function Readhtml or ReadSQL
return result
其中Variable
是具有一组输入参数的字典。
其中一些输入参数是用于读取值或对其执行操作的函数。我有大量不同的变量(大约1000个),每个变量都有一个字典关联。只要我在脚本开头定义输入字典,一切正常。但我希望能够重用这些词典,从而将它们保存到/多个人类可读写的输入文件/输入文件中。问题是我无法弄清楚如何以这样的方式保存/读取字典条目Variable['Readfunction']
python理解它不仅仅是一个字符串,而是我想要使用的脚本中定义的函数。
因此,我有两个问题:
答案 0 :(得分:2)
这就是pickling
和对象序列化的目的。
Documentation of pickle library
示例代码: -
import cPickle as pickle
variable = {'read_function': ReadHtml, 'Parameter1': 'abc'}
dump = pickle.dumps(variable)
# store dump in somewhere
variable = pickle.loads(dump)
PS - 你的命名惯例让我的眼睛受伤了。完成pep 8 guidelines
答案 1 :(得分:0)
将定义移动到另一个脚本并导入该脚本。这个问题的难点在于名称。如果你打电话给脚本说," definitions.py"并在脚本的顶部写下
import definitions as defn
然后您必须将变量称为defn.Readhtml
,依此类推。你可以使用
from definitions import *
然后你不必对这些名字进行限定,但是"那种疯狂的谎言,"因为你无法分辨在哪个模块中定义了哪些名称。
所以我认为这会做你想要的,但可能需要大量的重写,这取决于你的脚本是什么样的。