繁体   English   中英

如何通过名称(字符串)调用当前function中定义的一个function

[英]How do you call a function defined in the current function by its name (a string)

当名称存储在字符串中时如何调用 function, 已经得到解答

我想知道的是,如果我要呼叫的 function 在我的本地 scope 中定义,我该怎么做。

这与其他问题不同,因为当 function 在另一个 function 中时,它们并不是指按名称调用 function。

例如

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

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

那么在上面的代码中,我如何调用由 method_to_call 中的值定义的method_to_call呢?

您可以使用locals()

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

    method_to_call = 'inner'

    locals()[method_to_call]()

在调用outer之后,“调用”。 被打印出来。

请注意,如果存在名为inner的不可调用项(例如,具有inner = "abc"将导致此错误),则会出现错误。

但是,正如评论所说,这仅在您从其他地方获取inner名称时才有用(比方说输入)。 如果您事先已经知道要调用哪个本地 function,最好直接使用inner而不是通过locals()

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

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

    method_to_call = 'inner'

    eval(method_to_call + '()')

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM