Python True和[]的输出

Python True和[]的输出,python,syntactic-sugar,Python,Syntactic Sugar,我想知道为什么 True和[] 返回[],而不是False 这个表达式是一个语法糖吗?答案在: 表达式x和y首先计算x;如果x为false,则返回其值;否则,计算y并返回结果值 这种语法糖有时在Python中用作 C++: someVar = someCondition ? valueIfTrue : valueIfFalse; Python: someVar = someCondition and valueIfTrue or valueIfFalse 编辑:事实证明,根据评论:),这是P

我想知道为什么
True和[]

返回[],而不是False

这个表达式是一个语法糖吗?

答案在:

表达式
x和y
首先计算x;如果x为false,则返回其值;否则,计算y并返回结果值


这种语法糖有时在Python中用作

C++: someVar = someCondition ? valueIfTrue : valueIfFalse;
Python: someVar = someCondition and valueIfTrue or valueIfFalse 
编辑:事实证明,根据评论:),这是Python中的一个主要陷阱,应该用

someVar = valueIfTrue if condition else valueIfFalse

请注意,这些都不是等价的,python版本中有一个问题:如果
valueIfTrue
的计算结果为
False
,则无论
someCondition
True
还是
False
,都将返回
valueIfFalse
。如果某个条件的值为其他值,则改用
someVar=valueIfTrue以避免此陷阱。如果
valueIfTrue
的计算结果为假值,则不起作用。如果其他条件值也为
(从2.5开始),则最好使用
valueIfTrue。顺便说一句:
?:最初来自C,而不是来自C++。1。这不是糖。只是。。。语法。(否则:它是做什么用的?)。2. a和b或c
是错误的。它可能会在您无意的情况下计算
c
。您可以通过利用非空列表的属性将其计算为True来避免这个陷阱:
someVar=(someCondition和[valueIfTrue]或[valueIfFalse])[0]
即使valueIfTrue计算为False,它也会正确返回。亲爱的,我正在寻找Python中的三元运算符!到目前为止,我唯一发现的是
[ValueIfFalse,ValueIfTrue][someCondition]
,这当然在各个方面都很可怕。这个问题很好,我从来不知道。在我的代码的某些方面,我已经有了这种适用性的计划,其中真实情况需要返回一个空列表。如果该行为False,则返回False。不错……)