从Python中存储的字符串调用函数

时间:2017-02-14 13:30:52

标签: python python-3.x

我需要的是获取变量的东西,如果变量是函数的名称,则将调用该函数。 我不是试图从模块中获取函数,而是从程序本身中获取函数

示例:

def foo():
    print("Foo")
callfunction = input("What function do you want to call? ")

callfunction() ## Not sure what to put here but but lets say callfunction is foo.

我不想要这样的东西,因为我有很多功能:

if callfunction == "Foo"
    Foo()
else:
    print("No function with that name")

我的问题类似于this,但我要求Python语法。我使用的是Python 3.5.1

4 个答案:

答案 0 :(得分:7)

使用dict映射名称到函数。

call_dict = {
    'foo': foo,
    'bar': bar
}
call_dict[callfunction]()

答案 1 :(得分:4)

你可以这样做:

eval(input("What function do you want to call? ") + '()')

答案 2 :(得分:1)

在Python中使用命令模式很常见。首先将所有函数移动到一个类中,并为它们指定一个前缀未在输入中使用的名称。然后使用getattr()找到正确的函数并调用它。

class Commands():
   def cmd_foo(self):
       print("Foo")

   def callFunction(self, name):
       fn = getattr(self, 'cmd_'+name, None)
       if fn is not None:
            fn()

这比Daniel的call_dict有一些优点:你不必再次列出这些功能的名称,你不必每秒列出可调用的功能时间要么。

'cmd_'前缀用于确保您可以在类中使用其他方法,但仍然可以精确控制哪些方法可以直接调用。

答案 3 :(得分:0)

这应该这样做

import inspect
import your_module

list_of_functions = inspect.getmembers(your_module, inspect.isfunction)

现在list_of_functions是一个元组列表,每个函数的名称位于0位置,函数本身位于位置1。