在python中使用连接字符串作为函数调用

时间:2018-01-26 19:42:23

标签: string python-3.x function

我有一个函数,它输入2个字符串和一个点元组。基于这两个字符串的组合,应该在元组上调用特定的函数。我知道我可以编写一些嵌套的if语句,但我对从字符串调用现有函数的想法感兴趣。

例如,我有一个转换功能' foo2bar(points)'它转换了#foo'指向' bar'点。我之间有许多其他类型的点和转换。我现在想要实现一个' type2type(points,oldtype,newtype)'它接受字符串oldtype和newtype,并对这些字符串进行调整应该调用适当的转换。

如果我调用type2type(points,' foo',' bar'),我希望它能调用foo2bar(points)。

有没有办法通过连接这样的字符串来生成函数调用?我想说functionName = oldtype + '2' + newtype之类的内容,然后以某种方式调用' functionName。

2 个答案:

答案 0 :(得分:0)

嗯,这不是最安全的做事方式,你可以使用eval。使用您在底部发布的代码functionName = oldtype + '2' + newtype,您可以这样做:

functionName = oldtype + '2' + newtype
args = [] #whatever arguments you want in the function
eval(functionName+"(**args)")

答案 1 :(得分:0)

你几乎就在那里:在你构建functionName之后,你只需要找到这个功能。如果你的函数都在一个类中,你可以这样写:

    def type2type(self, points, x, y):
        name = '{}2{}'.format(x, y)
        if hasattr(self, name):
            return getattr(self, name)(points)
        else:
            raise ValueError("No function named {}".format(name))

如果他们是模块级功能,您可以在globals中查找它们:

def type2type(points, x, y):
    name = '{}2{}'.format(x, y)
    if name in globals():
        return globals()[name](points)
    else:
        raise ValueError("No function named {}".format(name))