本问题已经有最佳答案,请猛点这里访问。
我需要的是得到这个变量的东西如果这个变量是一个函数的名字,这个函数就会被调用。我不是试图从模块中获取函数,而是从程序本身中获取函数
例子:
1 2 3 4 5 | 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. |
我不想要这样的东西,因为我有很多功能:
1 2 3 4 | if callfunction =="Foo" Foo() else: print("No function with that name") |
我的问题是这样的,但是我要求Python语法。我使用的是Python 3.5.1
使用dict将名称映射到函数。
1 2 3 4 5 | call_dict = { 'foo': foo, 'bar': bar } call_dict[callfunction]() |
你可以这样做:
1 | eval(input("What function do you want to call?") + '()') |
在Python中使用命令模式非常常见。首先将所有函数移动到一个类中,并为它们命名,这些名称的前缀在输入中没有使用。然后使用
1 2 3 4 5 6 7 8 | 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相比,这有几个优点:您不必第二次列出函数的名称,也不必第二次列出可调用的函数。
这样就可以了
1 2 3 4 | import inspect import your_module list_of_functions = inspect.getmembers(your_module, inspect.isfunction) |
现在