三元运算符返回`True`而非给定值
我在用三元运算符来简短地定义条件变量。我想知道当表达式返回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