Python:将空字符串与False进行比较是假的,为什么?

Ton*_*wer 3 python string logic boolean

如果not ''评估为True,为什么'' == False评估为False

例如,其他类型的(例如,0,0.0)将返回的"空隙" True时相比False:

>>> 0 == False
True
>>> 0.0 == False
True
Run Code Online (Sandbox Code Playgroud)

谢谢

khe*_*ood 6

它没有意义''并且[]实际上是相等的False,因为它们显然是不同的值:字符串和列表.如果它们都相等,则False它们必须彼此相等*.它们只是"假的",这意味着它们在转换为布尔值时会变为假.

(*以任何明智的语言构建)

not是一个返回布尔值的操作.它返回的布尔值取决于操作数是否为假.所以not x不等同于x==False; 它相当于bool(x)==False.


dec*_*eze 6

在布尔运算的上下文中,以及控制流语句使用表达式时,以下值被解释为false : False, None所有类型的数字零,以及空字符串和容器(包括字符串,元组,列表,字典,集合)和frozensets).所有其他值都被解释为true.用户定义的对象可以通过提供__bool__()方法来定制其真值.

如果运算符的参数为false,则运算符not产生.TrueFalse

https://docs.python.org/3/reference/expressions.html#comparisons

但:

运营商<,>,==,>=,<=,和!=比较两个对象的值.对象不需要具有相同的类型.

...

由于所有类型都是(直接或间接)子类型object,因此它们继承了默认的比较行为object.类型可以通过实现丰富的比较方法来定制比较行为,例如__lt__()...

https://docs.python.org/3/reference/expressions.html#boolean-operations

所以,技术实现的答案是,它的行为确实是因为方式not==使用不同的比较.not使用__bool__,对象的"真值",在==使用时__eq__,将一个对象直接比较到另一个对象.因此,可以询问一个对象是否认为自己是真实的虚假的,并且与它分开询问它是否认为自己是否与另一个对象相等.对此的默认实现以两个对象都认为自己是假的但不认为自己彼此相等的方式排列.