Pythonic 方式 - 三元 vs 或
Pythonic way - Ternary vs or
我真的只是想知道,当谈到这种情况时,pythonic 的处理方式是什么?使用 if else
三元或 or
:
true_list = []
for x, y in a_list: # x, y could be any truthy or falsy value
true_list.append(x or y)
true_list.append(x if x else y)
编辑: 我更新了问题以忽略语义,我主要想知道哪个表达式更 pythonic。
这是引入条件运算符的情况;使用它。
string += x if x else y # Or ... if x is not None ... if the distinction is necessary
一般来说,当你只关心表达式的真实性,而不关心其真实性正在考虑的"actual"值时,使用or
。
引入条件表达式是因为很多人试图写出这样的代码
<condition> and x or y
但这是一个微妙的错误:如果条件为真,表达式的意图是等于 x
,但如果 both[=26],它实际上只等于 x
=] 条件和 x
为真。
在 x
和 y
都可以是 None
的情况下,你可以做更详细的:
>>> string = ""
>>> x, y = (None, None)
>>> string += x if x else y if y else '' # Fallback to empty string
>>> string
''
我真的只是想知道,当谈到这种情况时,pythonic 的处理方式是什么?使用 if else
三元或 or
:
true_list = []
for x, y in a_list: # x, y could be any truthy or falsy value
true_list.append(x or y)
true_list.append(x if x else y)
编辑: 我更新了问题以忽略语义,我主要想知道哪个表达式更 pythonic。
这是引入条件运算符的情况;使用它。
string += x if x else y # Or ... if x is not None ... if the distinction is necessary
一般来说,当你只关心表达式的真实性,而不关心其真实性正在考虑的"actual"值时,使用or
。
引入条件表达式是因为很多人试图写出这样的代码
<condition> and x or y
但这是一个微妙的错误:如果条件为真,表达式的意图是等于 x
,但如果 both[=26],它实际上只等于 x
=] 条件和 x
为真。
在 x
和 y
都可以是 None
的情况下,你可以做更详细的:
>>> string = ""
>>> x, y = (None, None)
>>> string += x if x else y if y else '' # Fallback to empty string
>>> string
''