python - 将函数列表(带参数)作为 python 中的输入

标签 python function

我的意图是这样做:

config = {"methods": ["function1(params1)", "function2(params2)"] }

这是我从 json 文件中读取的。因此,要使用它,我需要将其传递给另一个函数,如下所示:

for method in config[methods]:
    foo(global()[method])

我知道这不起作用,因为全局变量仅将函数名称从字符串转换为函数,但我也需要它也适用于带参数的函数。

我也想到了这一点:

config = {"methods": [("function1", params1) , ("function2", params2)] }
for method in config[methods]:
    foo(global()[method[0]](method[1]))

这可以工作,但我可能有一些不需要参数的函数。我不想对元组中的第二个条目是否存在进行条件检查。

还有其他办法解决这个问题吗?我愿意改变整个方法,包括输入格式。请大家提出建议。

最佳答案

这是一个适用于任意数量参数的简化示例:

from re import findall

def a(*args):
    for i in args:
        print i

config = {"methods": ["a('hello')", "a('hello','bye')", "a()"]}

for i in config['methods']:
    x,y = findall(r'(.*?)\((.*?)\)', i)[0]
    y = [i.strip() for i in y.split(',')]
    globals()[x](*y)


[OUTPUT]
'hello'
'hello'
'bye'

DEMO

关于python - 将函数列表(带参数)作为 python 中的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23800053/

相关文章:

python - 将 re.sub 与组一起使用

python - 将字符串转换为 Quantlib Date()

java - 为什么不能像函数一样调用构造函数?

c++ - 强制调用基类虚函数

javascript - 无法从函数内部覆盖函数

python - 将多个值传递给函数调用 (Python)

c++ - Boost.Fusion 功能 : Calling functions with default arguments

python - sre_constants.错误: invalid group reference Python regular expressions

python - `pipenv install` 和 `pipenv lock` 有什么区别?

python - 没有导入候选人的实例