我有一些变量,我想选择第一个评估为True的变量,否则返回一个默认值.
比如我有a,b和c.我现有的代码:
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)
只要default评估为True:
result = next((x for x in (a, b, c, d , e, default) if x))
Run Code Online (Sandbox Code Playgroud)