如何运行以变量命名的函数?

时间:2019-05-05 18:15:21

标签: python function

我想运行一个函数,该函数的名称是变量的值。因此,如果variable == "Hello"将运行函数Hello()。该变量来自excel文档中的某个单元格(我只是想添加一下)。

我尝试使用eval(),但是当函数不仅仅是文本输出时,这似乎不起作用。

this = sheet["B"+str(row)].value 
eval(function+"()")

我只希望它运行函数,但是外壳程序只是跳过eval(this+"()")-所以我不确定实际发生了什么。

3 个答案:

答案 0 :(得分:2)

您可以使用eval()来运行该函数:

eval(variable)()

答案 1 :(得分:1)

globals()函数返回代表当前作用域的字典,因此globals()[this]给出了对该函数的引用,而globals()[this]()将不带任何参数地调用它。

这比eval安全一点,因为它不会执行任意代码(尽管在不受信任的输入上仍然有风险)。

答案 2 :(得分:0)

使用locals变量按名称返回该函数,进行检查,确认它实际上可调用,然后运行它。

def test_func():
    print("In test function")

func_name = "test_func"

if func_name in locals() and callable(locals()[func_name]):
    locals()[func_name]()

输出

In test function

正如Thomas所提到的,如果函数在全局名称空间中,也可以使用global()而不是locals()来完成。另外,如果您想检查类中的方法,然后调用它,则需要使用hasattr()函数。