如何迭代所有导入的函数

时间:2014-02-17 14:55:09

标签: python python-3.x functional-programming

我的代码效果很好。它的工作方式是我必须键入一个函数,比如足球,以使games.soccer模块处于活动状态,然后我可以输入一个查询,例如“最新得分”,然后我关闭它然后键入autocare以使其工作。我需要帮助编码一种只需键入查询的方法,例如'最新得分'..然后这将迭代PLAY词典中的所有导入函数以找到答案。这是代码

import games
import clauseq11
PLAY = {
    'soccer': games.soccer,
    'nba': games.nba,
    'autorace': games.autorace,
    'search_name': clauseq11.search_name,
    'answer_neg1': clauseq11.answer_neg1,
    }

while True:
    question = input('Please enter your question: ').lower()
    if not question:
        break
    for key, func in PLAY.items():             
        if key in question:
            func()
            break
    else:
        print('Sorry I do not have an answer! :(')

1 个答案:

答案 0 :(得分:1)

我猜你正在寻找的是一种从用户那里获取函数名称的方法,如果它存在于你导入的模块中,则执行具有该名称的函数。以下是实现它所需的全部内容:

示例模块t.py

def foo(): print 'foo here!'
def bar(): print 'bar here!'

导入模块:

In [1]: import t

找出你的模块有哪些功能:

In [2]: print dir(t)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'bar', 'foo']

在模块中执行具有给定名称的函数:

In [3]: getattr(t, 'foo')()
foo here!