我有一个函数,它输入2个字符串和一个点元组。基于这两个字符串的组合,应该在元组上调用特定的函数。我知道我可以编写一些嵌套的if语句,但我对从字符串调用现有函数的想法感兴趣。
例如,我有一个转换功能' foo2bar(points)'它转换了#foo'指向' bar'点。我之间有许多其他类型的点和转换。我现在想要实现一个' type2type(points,oldtype,newtype)'它接受字符串oldtype和newtype,并对这些字符串进行调整应该调用适当的转换。
如果我调用type2type(points,' foo',' bar'),我希望它能调用foo2bar(points)。
有没有办法通过连接这样的字符串来生成函数调用?我想说functionName = oldtype + '2' + newtype
之类的内容,然后以某种方式调用' functionName。
答案 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))