擅长:python、mysql、java
<p>函数是Python中的对象。这意味着您可以将它们存储在词典中。一种方法是通过将要调用的名称存储为键,将函数存储为值来分派函数调用。你知道吗</p>
<p>例如:</p>
<pre><code>import func1, func2
operation_dispatcher = {
"func1": getattr(func1, "func1"),
"func2": getattr(func2, "func2"),
}
def something_calling_funcs(func_name, param):
"""Calls func_name with param"""
func_to_call = operation_dispatcher.get(func_name, None)
if func_to_call:
func_to_call(param)
</code></pre>
<p>现在可以使用<a href="https://docs.python.org/2/library/functions.html#__import__" rel="nofollow">^{<cd1>}</a>之类的工具更自动地生成分派表,但是在这种情况下可能有更好的设计(也许可以考虑重新组织导入)。你知道吗</p>
<p>EDIT花了我一分钟的时间对此进行了全面测试,因为我必须设置一些文件,如果您有许多名称要导入,并且不想在字典中手动指定每个名称,则可以执行类似的操作:</p>
<pre><code>import importlib
func_names = ["func1", "func2"]
operation_dispatch = {
name : getattr(importlib.import_module(name), name)
for name in func_names}
#usage
result = operation_dispatch[function_name](param)
</code></pre>
<p>注意,这假设函数名和模块名是相同的。它使用<a href="https://docs.python.org/2/library/importlib.html" rel="nofollow">importlib</a>从<code>func_names</code>中提供的字符串导入模块名。你知道吗</p>