繁体   English   中英

如何在python中将函数保存为输入参数?

[英]How to save a function as input parameter in python?

我编写了一个脚本,基本上可以简化为以下脚本:

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理解这不仅是字符串,而且是我要使用的脚本中定义的函数。

因此,我有两个问题:

  1. 我可以写一个肮脏的解决方法,将Variable ['Readfunction']作为字符串保存到文件中,再将其重新读取为字符串,然后编写一个与函数名称字符串匹配的函数。 有没有更好的办法?
  2. 整个架构无意义吗? 我是否应该以其他完整方式构建它来避免该问题? 我不是一个很好的程序员,所以您应该如何以适当的方式做这样的事情? 该程序已经很复杂,无法完全重写,因此这是有关下一次学习的更多内容。

这就是pickling和对象序列化的目的。

酱菜库的文档

示例代码:-

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准则

将定义移至另一个脚本并导入该脚本。 困难在于名字。 如果调用脚本说“ definitions.py”,则在脚本顶部编写

import definitions as defn

那么您必须将变量引用为defn.Readhtml等。 您可以使用

from definitions import *

然后您不必限定名称,而是使用“疯狂的方式”,因为您无法确定在哪个模块中定义了哪些名称。

因此,我认为这将满足您的要求,但可能需要大量重写,具体取决于您的脚本是什么样的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM