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