我需要的是获取变量的东西,如果变量是函数的名称,则将调用该函数。 我不是试图从模块中获取函数,而是从程序本身中获取函数
示例:
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
答案 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。