三元运算符返回`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
Python条件运算符与其他语言的顺序不同。除非您确定需要,否则您绝对不应该与None
进行比较。
conv_d = int(digits) if digits is not None else None
替代三元运算符:
conv_d =位数=无和INT(数字)或无#短路;!只是错在这种情况下,因为它不包括数字字符=“0” - 下面
或
conv_d = INT(数字)请参阅评论(县)如果数字不无其他无
第二个表达式更清晰,因此更受欢迎。
如果'int(digits)'为0,则第一个将失败。如果'digits'不与'None'进行公平比较,则两者都会失败。 –
感谢您收到第一个错误!这个想法仅仅是为了表明在Python中有一些替代方案可以用于缺少三元运算符,所以我简单地认为数字是由[0-9]或None组成的一个str(无论如何,ThiefMaster的回复都涵盖了这个问题)。鉴于此,我同意在与None比较时,“不是”是首选运营商。 – buckdeer
注意如何放置关键字。 “X如果Y否则Z”。 “Y”是跟随“if”的部分,所以它是条件。 “如果Y是X”是完全有效的(虽然不太常见)英语结构,意思与“如果Y,X”是相同的事物,因此X是当Y被满足时评估的表达。类似地,Z是当Y不满意时评估的表达式。
非常好!谢谢。 – I159