来自字符串的Python调用函数[重复]

Posted

技术标签:

【中文标题】来自字符串的Python调用函数[重复]【英文标题】:Python Call Function from String [duplicate] 【发布时间】:2015-04-06 23:25:45 【问题描述】:
s = "func"

现在假设有一个名为 func 的函数。 当函数名以字符串形式给出时,如何在 Python 2.7 中调用 func?

【问题讨论】:

【参考方案1】:

最安全的方法:

In [492]: def fun():
   .....:     print("Yep, I was called")
   .....:

In [493]: locals()['fun']()
Yep, I was called

根据上下文,您可能希望改用globals()

或者,您可能想要这样设置:

def spam():
    print("spam spam spam spam spam on eggs")

def voom():
    print("four million volts")

def flesh_wound():
    print("'Tis but a scratch")

functions = 'spam': spam,
             'voom': voom,
             'something completely different': flesh_wound,
             

try:
    functions[raw_input("What function should I call?")]()
except KeyError:
    print("I'm sorry, I don't know that function")

你也可以将参数传递给你的函数:

def knights_who_say(saying):
    print("We are the knights who say ".format(saying))

functions['knights_who_say'] = knights_who_say

function = raw_input("What is your function? ")
if function == 'knights_who_say':
    saying = raw_input("What is your saying? ")
    functions[function](saying)
else:
    functions[function]()

【讨论】:

【参考方案2】:

你可以通过传递一个字符串来执行一个函数:

exec(s + '()')

【讨论】:

这行不通,因为你从不调用函数 是的,我明白了,它只会返回函数对象而不是调用它。我修好了。【参考方案3】:
def func():
    print("hello")
s = "func"
eval(s)()

In [7]: s = "func"

In [8]: eval(s)()
hello

不推荐!只是告诉你如何做。

【讨论】:

@BhargavRao,这是一个大胆的声明! @MagentaNova,我很确定它确实如此 @padriac,你是对的,删除评论。【参考方案4】:

你可以使用 exec。不推荐但可行。

s = "func()"

exec s 

【讨论】:

以上是关于来自字符串的Python调用函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从Python中存储的字符串调用函数[重复]

来自html的Php参数化函数调用[重复]

python二级练习和考试复习(寻找差异&&链式函数调用&&检查重复值)

通过来自 Python 的 dbus 函数调用传递文件描述符(又名调用 flatpak 的 HostCommand)

在Python中使用getattr调用函数[重复]

如何从Python中的另一个函数调用函数内的函数? [重复]