Python - 将字符串更改为参数并将其传递给函数

时间:2017-03-28 16:42:58

标签: python

我正在使用带有mysql数据库的python。 我在该数据库中有一个表,用于存储要运行的函数的名称 我还想添加一种可能性,将变量存储在表中,动态检索它们并将它们传递给函数。 但是当存储在db中时,参数是字符串,我不知道如何将它们转换为变量名称以传递给函数。

例如,让我们考虑以下示例,其中表包含:

module        function      arguments  (<--columns names)
indicators    scrape_web    datapoints   

让我们说我用mysql lib检索数据并将其保存在dict中,例如:

script:{'module': 'indicators',
        'function': 'scrape_web',
        'arguments': 'datapoints'}

我可以检索模块和函数名称,并运行没有这样的参数的函数:

module = __import__(script['module'])
func = getattr(module, script['function'])
func()

但是,如果我想将参数传递给函数,以便函数运行func(datapoints)

,该怎么办?
func(script['arguments'])

显然不起作用。

所有人都非常感谢。

1 个答案:

答案 0 :(得分:1)

假设脚本[&#39; arguments&#39;]返回一个字符串,该字符串是变量的名称。

func(eval(script['arguments']))

对于多个参数,使用脚本[&#39; arguments&#39;]拆分字符串.split(&#34;,&#34;) 并为列表中的每个元素使用eval。

如果您希望它尽可能通用:

args = script(['arguments']).split(",")
fstr = 'func('
for i in range(0,len(args)) : fstr +='eval(args['+str(i)+']),'
fstr = fstr[:-1]
#to remove the trailing comma
fstr += ')'
eval(fstr)