使用字符串来调用函数

时间:2015-08-30 23:20:07

标签: python python-2.7 nodebox-linguistics

from en import verb
print verb.tenses()
print verb.infinitive('argue')


['infinitive', 'present participle', 'past plural', '2nd singular present', '2nd singular past', 'past', '3rd singular present', 'past participle', '1st singular present', '1st singular past', '3rd singular past', 'present plural']
    argue

Using this

我找不到一个能给出动词所有时态的方法。调用每个函数只有一种方法:使用动词对象替换列表中的空格。我怎么能做到这一点?

输入:argue。输出应为:arguingarguedargue ..

2 个答案:

答案 0 :(得分:1)

您可以为时态的每个名称创建名称/参数列表。例如:

tense_functions = {
    'infinitive': ('infinitive', {}),
    'present participle': ('present_participle', {}),
    '1st singular present': ('present', {'person': 1}),
    ...
}
for tense in verb.tenses():
    options = tense_functions[tense]
    func = getattr(verb, options[0])
    print(func('argue', **options[1]))

答案 1 :(得分:0)

您可以执行getattr(verb, 'infinitive'),它将返回与verb.infinitive完全相同的函数的引用。然后,您可以遍历这样的字符串列表:

some_tenses = ['infinitive', 'present_participle', 'past_plural',]
for tense in some_tenses:
    print getattr(verb, tense)('argue')

当然,字符串必须是模块中的确切函数名称,无论它们是什么。

您可能还想查看hasattr()。如果您尝试getattr(),但您提供的属性对于该对象不存在,那么您将获得AttributeError。在尝试if hasattr(...之前使用getattr(...可以让您优雅地处理此类案例。或者,您可以使用try ... except块。