Pythonic方法选择评估为True的第一个变量

hoj*_*oju 5 python

我有一些变量,我想选择第一个评估为True的变量,否则返回一个默认值.

比如我有a,bc.我现有的代码:

result = a if a else (b if b else (c if c else default))
Run Code Online (Sandbox Code Playgroud)

我正在考虑的另一种方法:

result = ([v for v in (a, b, c) if v] + [default])[0]
Run Code Online (Sandbox Code Playgroud)

但他们都感到凌乱,那么有更多的Pythonic方式吗?

Den*_*ach 21

你的意思是回报第一个值是什么bool(value)==True?然后你可以依赖布尔运算符返回最后一个被评估的参数的事实:

result = a or b or c or default
Run Code Online (Sandbox Code Playgroud)


Jua*_*nti 17

如果一个变量未"定义",则无法访问其名称.因此,对'a'的任何引用都会引发NameError异常.

另一方面,如果你有类似的东西:

a = None
b = None
c = 3
Run Code Online (Sandbox Code Playgroud)

你可以做

default = 1
r = a or b or c or default
# r value is 3
Run Code Online (Sandbox Code Playgroud)


Rob*_*ney 5

只要default评估为True:

result = next((x for x in (a, b, c, d , e, default) if x))
Run Code Online (Sandbox Code Playgroud)

  • 如果你决定使用`next`,你也可以使用它的`default`参数 (4认同)