我使用三元运算符进行短条件变量定义。我想知道表达式何时返回True而不是在表达式值中给出。
>>> digits = '123456'
>>> conv_d = digits != None if int(digits) else None
>>> conv_d
>>> True
>>> int(digits)
>>> 123456
请告诉我,这是怎么回事? Python中三元运算符和常规条件表达式之间的逻辑区别是什么?
答案 0 :(得分:7)
int(digits) == 123456
这是一个真正的价值。所以conv_d = digits != None
。由于digits
不是None
,conv_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时评估的表达式,类似地。