我想根据一组函数中的哪一个返回true来返回一个值。
if a():
return 'a'
elif b():
return 'b'
else:
return 'c'
有更多的pythonic方式吗?
答案 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
(有意定义)将用作默认值。