我想运行一个函数,该函数的名称是变量的值。因此,如果variable == "Hello"
将运行函数Hello()
。该变量来自excel文档中的某个单元格(我只是想添加一下)。
我尝试使用eval()
,但是当函数不仅仅是文本输出时,这似乎不起作用。
this = sheet["B"+str(row)].value
eval(function+"()")
我只希望它运行函数,但是外壳程序只是跳过eval(this+"()")
-所以我不确定实际发生了什么。
答案 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()函数。