三元运算符返回`True`而不是给定值

问题描述:

我使用三元运算符作为短条件变量定义。我想知道什么时候表达式返回True,而不是在表达式值中给出。三元运算符返回`True`而不是给定值

>>> digits = '123456' 

>>> conv_d = digits != None if int(digits) else None 

>>> conv_d 
>>> True 

>>> int(digits) 
>>> 123456 

请向我解释这是怎么发生的? Python中的三元运算符和常规条件表达式之间的逻辑区别是什么?

int(digits) == 123456这是一个真正的价值。所以conv_d = digits != None。由于digits不是None,因此conv_d设置为true。

你可能想要这个:

conv_d = int(digits) if digits is not None else None 

请记住,包含一些字符串不是一个数字,虽然会引发异常!如果您对这些值更喜欢0或无,请编写一个小函数:

def toint(s): 
    try: 
     return int(s) 
    except (ValueError, TypeError): 
     return None # or 0 
+0

非常好!谢谢。 – I159

Python条件运算符与其他语言的顺序不同。除非您确定需要,否则您绝对不应该与None进行比较。

conv_d = int(digits) if digits is not None else None 

替代三元运算符:

conv_d =位数=无和INT(数字)或无#短路;!只是错在这种情况下,因为它不包括数字字符=“0” - 下面

conv_d = INT(数字)请参阅评论(县)如果数字不无其他无

第二个表达式更清晰,因此更受欢迎。

+0

如果'int(digits)'为0,则第一个将失败。如果'digits'不与'None'进行公平比较,则两者都会失败。 –

+0

感谢您收到第一个错误!这个想法仅仅是为了表明在Python中有一些替代方案可以用于缺少三元运算符,所以我简单地认为数字是由[0-9]或None组成的一个str(无论如何,ThiefMaster的回复都涵盖了这个问题)。鉴于此,我同意在与None比较时,“不是”是首选运营商。 – buckdeer

注意如何放置关键字。 “X如果Y否则Z”。 “Y”是跟随“if”的部分,所以它是条件。 “如果Y是X”是完全有效的(虽然不太常见)英语结构,意思与“如果Y,X”是相同的事物,因此X是当Y被满足时评估的表达。类似地,Z是当Y不满意时评估的表达式。