我不知道为什么我们要附加与函数名称匹配的字符串,但如果这是一个通用模式,我们可以使用它。函数有一个__name__
属性,我认为它总是包含你想要的列表。
那么怎么样:
return [fn.__name__ for fn in (self.taken, self.suggested, foo, bar, baz) if fn()]
如果我正确理解了这个问题,这对于非成员函数和成员函数一样有效。
编辑:
好的,让我们添加一个映射字典。并将函数名称拆分为元组或列表。
fns_to_check = (self.taken, self.suggested, foo, bar, baz)
# This holds only the exceptions; if a function isn't in here,
# we will use the .__name__ attribute.
fn_name_map = {foo:'alternate', bar:'other'}
def fn_name(fn):
"""Return name from exceptions map, or .__name__ if not in map"""
return fn_name_map.get(fn, fn.__name__)
return [fn_name(fn) for fn in fns_to_check if fn()]
您也可以只使用@hcwhsa 的映射字典答案。这里的主要区别是我建议只映射异常。