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

Python-将字符串更改为参数并将其传递给函数,python,Python,我正在使用python和mysql数据库。 我在数据库中有一个表,存储要运行的函数的名称。 我还想添加一种可能性,将变量存储在表中,动态地检索它们并将它们传递到函数中。 但是,当存储在db中时,参数是字符串,我不知道如何将它们转换为变量名以传递给函数 例如,让我们考虑下面的例子,其中表包含: module function arguments (<--columns names) indicators scrape_web datapoints

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

例如,让我们考虑下面的例子,其中表包含:

module        function      arguments  (<--columns names)
indicators    scrape_web    datapoints   
我可以检索模块和函数名,并在不使用以下参数的情况下运行函数:

module = __import__(script['module'])
func = getattr(module, script['function'])
func()
但是如果我想将参数传递到函数中,使函数运行
func(datapoints)

显然不行


非常感谢所有帮助。

假设脚本['arguments']返回一个字符串,该字符串是变量的名称

func(eval(script['arguments']))
对于多个参数,使用脚本['arguments']拆分字符串。拆分(“,”) 并对列表中的每个元素使用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)

假设脚本['arguments']返回一个字符串,该字符串是变量的名称

func(eval(script['arguments']))
对于多个参数,使用脚本['arguments']拆分字符串。拆分(“,”) 并对列表中的每个元素使用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)

您是否试图调用
func('datapoints')
func(datapoints)
(其中
datapoints
是包含一些数据的变量)?
datapoints
应该在哪个命名空间中找到?@火箭危险品,如问题中所述,
func(datapoints)
@user2357112在运行函数
func的脚本的命名空间中
如果参数在调用代码的全局命名空间中,则您可以通过名称访问它们,例如
globals()['datapoints']
是否尝试调用
func('datapoints')
func(datapoints)
(其中,
datapoints
是一个包含一些数据的变量)?问题中提到的
datapoints
应该在@Rocket Hazmat中找到什么命名空间,
func(datapoints)
@user2357112在运行函数
func
的脚本的命名空间中,如果参数在调用代码的全局命名空间中,那么您可以通过名称访问它们,例如
globals()['datapoints']
这是一个很棒的thx-如果函数采用多个参数怎么办?例如,如果
script:{'module':'indicators','function':'scrape_web','arguments':'datapoints,25'}
?使用脚本['arguments'].split(,“”)获取参数列表,并为每个参数调用evalargument@jimbasquiat我更新了我的答案以合并您的评论我一直在尝试
func([eval(x)for x in script['arguments'].split(“,”))
但我收到了错误消息:
缺少1个必需的位置参数
。我实际应该使用的表达式是什么?@jimbasquiat[eval(x)for x in script['arguments']。split(“,”)]将返回一个列表,因此它将是一个参数。您的函数应该获取一个列表,或者您应该在各自的位置传递参数。
args=script['arguments'].splti(“,”)
func(eval(args[0])、eval(args[1])这很好,thx-如果函数具有多个参数怎么办?例如,如果
script:{'module':'indicators','function':'scrape_web','arguments':'datapoints,25'}
?使用脚本['arguments'].split(,“”)获取参数列表,并为每个参数调用evalargument@jimbasquiat我更新了我的答案以合并您的评论我一直在尝试
func([eval(x)for x in script['arguments'].split(“,”))
但我收到了错误消息:
缺少1个必需的位置参数
。我实际应该使用的表达式是什么?@jimbasquiat[eval(x)for x in script['arguments']。split(“,”)]将返回一个列表,因此它将是一个参数。您的函数应该获取一个列表,或者您应该在相应的位置传递参数。
args=script['arguments'].splti(“,”)
func(eval(args[0])、eval(args[1])…等)