Pythonic根据多个函数的结果返回值的方法

时间:2017-11-22 21:17:42

标签: python

我想根据一组函数中的哪一个返回true来返回一个值。

if a():
    return 'a'
elif b():
    return 'b'
else:
    return 'c'

有更多的pythonic方式吗?

5 个答案:

答案 0 :(得分:4)

如果可以将所有函数放入可迭代函数中:

functions = [a, b]
for func in functions:
    if func():
        return func.__name__
return "c"

当提供许多函数时,这更有意义,因为唯一改变的是functions(以及可选的'默认'返回值)。如果你想将它作为一个函数:

def return_truthy_function_name(*functions, default):
    """Iterate over `*functions` until a function returns a truthy value, then return its name.
    If none of the functions return a truthy value, return `default`.
    """
    for function in functions:
        if function():
            return function.__name__
    return default

答案 1 :(得分:2)

我不知道它是否更具pythonic,但使用2个嵌套三元表达式会更短:

return 'a' if a() else ('b' if b() else 'c')

如果有两个以上的条件,嵌套三元表达式变得荒谬,循环逼近Coal_ answer(可能使用tuples列表来关联函数调用和返回值,如果有&#39 s之间没有明显的关系2)更好。

答案 2 :(得分:0)

您可以使用条件表达式:

return 'a' if a() else 'b' if b() else 'c'

答案 3 :(得分:0)

d = {a: 'a() is true',
     b: 'b() is true',
     c: 'c() is true'}

for func, answer in d.items():
  if func():
    return answer
return 'nothing seems to be true'

答案 4 :(得分:0)

实际上 最pythonic 以及做出你要求的一般化方式可能是

next((f for f in [a,b] if f()), c).__name__

请注意,如果生成器为空,则可调用c(有意定义)将用作默认值。