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

时间:2011-11-07 08:36:25

标签: python conditional

我使用三元运算符进行短条件变量定义。我想知道表达式何时返回True而不是在表达式值中给出。

>>> digits = '123456'

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

>>> conv_d
>>> True

>>> int(digits)
>>> 123456
请告诉我,这是怎么回事? Python中三元运算符和常规条件表达式之间的逻辑区别是什么?

4 个答案:

答案 0 :(得分:7)

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

你可能想要这个:

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

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

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

答案 1 :(得分:5)

Python条件运算符与其他语言的顺序不同。除非你确定需要,否则你永远不应该将平等与None进行比较。

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

答案 2 :(得分:0)

三元运营商的替代方案:

conv_d = digits!=无和int(数字)或无#短路;在这种情况下错误,因为它不适用于数字=“0” - 请参阅下面的评论

conv_d = int(digits)如果数字不是None None

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

答案 3 :(得分:0)

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