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

7 投票
7 回答
3462 浏览
提问于 2025-04-15 16:24

我有一些变量,我想选择第一个值为真的变量,如果没有的话就返回一个默认值。

比如我有 abc。我现在的代码是:

result = a if a else (b if b else (c if c else default))

我还考虑过另一种方法:

result = ([v for v in (a, b, c) if v] + [default])[0]

但是这两种方法都感觉有点乱,所以有没有更符合Python风格的方法呢?

7 个回答

5

只要 default 的值是 True:

result = next((x for x in (a, b, c, d , e, default) if x))
17

如果一个变量没有“定义”,你就无法访问它的名字。所以任何提到'a'的地方都会引发一个名为NameError的错误。

另一方面,如果你有类似这样的代码:

a = None
b = None
c = 3

你就可以这样做:

default = 1
r = a or b or c or default
# r value is 3
25

你是想问如何返回第一个值,当 bool(value)==True 时吗?那么你可以依靠一个事实,那就是布尔运算符会返回最后一个被计算的参数:

result = a or b or c or default

撰写回答