当函数名称存储在字符串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
中的值定义的函数?
答案 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>