如何调用当前函数中按其名称(字符串)定义的函数

时间:2020-07-17 22:52:37

标签: python

当函数名称存储在字符串has already been answered中时,如何调用函数。

我想知道的是,如果要调用的函数是在本地作用域中定义的,该怎么办。

这与其他问题不同,因为当函数在另一个函数内部时,它们不是指通过名称调用函数。

例如

def outer():
   
    def inner():
        # code for inner

    method_to_call = 'inner'
   
    # call inner by the value of method_to_call

那么在上面的代码中,如何调用method_to_call中的值定义的函数?

2 个答案:

答案 0 :(得分:4)

您可以使用locals()

def outer():
    def inner():
        print("Called.")

    method_to_call = 'inner'

    locals()[method_to_call]()

呼叫outer之后,“已呼叫”。已打印。

请注意,如果存在一个名为inner的不可调用项(例如,拥有inner = "abc"会导致此错误)。

但是,正如评论所说,这仅在您从其他位置(例如输入)获得名称inner时才有用。如果您已经事先知道要调用什么本地函数,则最好直接使用inner而不是通过locals()

答案 1 :(得分:0)

在Python中,您可以使用eval将任何字符串转换为代码并执行。

def outer():
    def inner():
        # code for inner

    method_to_call = 'inner'

    eval(method_to_call + '()')

请注意,该字符串必须包含有效的Python代码,因此在这种情况下,您将需要在函数名称中添加括号(),以创建调用语句,就像在普通调用中编写该语句一样。 / p>