我从电子邮件中抓取了一些字符串到一个列表中。这些字符串对应于我想稍后调用的函数的名称。我不能以当前的形式调用它们所以有没有办法将字符串列表转换成我可以调用的函数列表?
例如:
a = ['SU', 'BT', 'PL']
str = 'sdf sghf sdfgdf SU agffg BL asu'
matches = [x for x in a if x in str]
print(matches)
的回报:
['SU', 'BL']
但是我不能从这个列表中调用函数SU和BL。
下面的例子:
def my_func1():
print("ONE")
def my_func2():
print("TWO")
你可以尝试eval
,但这不是一个好的做法:(解释)
eval("my_func1")()
或者您可以将此函数赋值给等效的字符串(在字典中),并运行它:
my_func_dict = {
"my_func1": my_func1,
"my_func2": my_func2
}
my_func_dict["my_func1"]()
这两个例子都将打印ONE
。
或者更接近你的例子:
a = [my_func1, my_func2]
matches = [x for x in a if x.__name__ in str]
# matches now has two funcions inside, so you can run either:
matches[0]()
matches[1]()