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

I15*_*159 4 python conditional

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

>>> digits = '123456'

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

>>> conv_d
>>> True

>>> int(digits)
>>> 123456
Run Code Online (Sandbox Code Playgroud)

请解释一下,这是怎么回事?Python中的三元运算符和常规条件表达式之间的逻辑区别是什么?

Thi*_*ter 7

int(digits) == 123456这是一个真正的价值.所以conv_d = digits != None.既然digits不是None,conv_d则设置为true.

你可能想要这个:

conv_d = int(digits) if digits is not None else None
Run Code Online (Sandbox Code Playgroud)

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

def toint(s):
    try:
        return int(s)
    except (ValueError, TypeError):
        return None # or 0
Run Code Online (Sandbox Code Playgroud)


Ign*_*ams 5

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

conv_d = int(digits) if digits is not None else None
Run Code Online (Sandbox Code Playgroud)