【问题标题】:How do you call a function defined in the current function by its name (a string)如何通过名称(字符串)调用当前函数中定义的函数
【发布时间】:2020-11-07 18:39:32
【问题描述】:

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

【问题讨论】:

标签: python


【解决方案1】:

你可以使用locals():

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

    method_to_call = 'inner'

    locals()[method_to_call]()

致电outer 后,“已致电”。被打印出来了。

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

但是,正如 cmets 所说,这仅在您从其他地方(假设输入)获得名称 inner 时才有用。如果您事先已经知道要调用的本地函数,最好直接使用inner,而不是通过locals()

【讨论】:

  • input 你可能是指inner
  • @fuglede 是的,我的错。
  • locals()...不错
【解决方案2】:

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

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

    method_to_call = 'inner'

    eval(method_to_call + '()')

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    • 2012-06-19
    • 2010-09-15
    相关资源
    最近更新 更多