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

4 投票
4 回答
972 浏览
提问于 2025-04-17 05:47

我在用三元运算符来简短地定义条件变量。我想知道当表达式返回True时,为什么会给出表达式的值。

>>> digits = '123456'

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

>>> conv_d
>>> True

>>> int(digits)
>>> 123456

请给我解释一下,这是怎么回事?三元运算符和Python中普通的条件表达式有什么逻辑上的区别?

4 个回答

0

三元运算符的替代方法:

conv_d = digits != None and int(digits) or None # 这里用的是短路运算;在这个上下文中是错误的,因为它对 digits = "0" 不适用 - 请查看下面的评论

或者

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

第二种写法更清晰,所以更受欢迎。

5

Python中的条件运算符和其他编程语言的顺序不太一样。而且,除非你非常确定需要这样做,否则不要用None来比较是否相等。

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

这里的意思是,int(digits) == 123456 这个表达式的结果是“真”,所以 conv_d = digits != None 的意思是,如果 digits 不是 None,那么 conv_d 就会被设置为“真”。

你可能想要的是这个:

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

撰写回答