这些表达式的评价应该不同

时间:2011-09-23 23:13:42

标签: python if-statement

在我发现代码中的错误之前,我有点困惑。我不得不改变

a.matched_images.count #True when variable is 0

a.matched_images.count > 0 #False when variable is 0

由于我很快想知道某个对象是否有任何图像,因此第一个代码会显示为照片有图像,因为当含义真的为假时,表达式的评估结果为True("没有图像&# 34; / 0图像)

我是否正确理解了这一点,如果这些表达式应该评估为不同的值,请您回答或评论。

3 个答案:

答案 0 :(得分:3)

count的性质是什么?如果它是基本的Python编号,则if countif count != 0相同。另一方面,如果count是自定义类,那么它需要为Python 2.x或__nonzero____len__实现__bool____len__对于Python 3.x.如果未定义这些方法,则该类的每个实例都被视为True

答案 1 :(得分:2)

不知道count是什么,很难回答,但this excerpt可能对您有用:。

  

以下值被视为false:

     
      
  •   
  •   
  • 任何数字类型的零,例如0,0L,0.0,0j。

  •   
  • 任何空序列,例如'',(),[]。

  •   
  • 任何空映射,例如{}。

  •   
  • 用户定义类的实例,如果类定义了   {1}}或__nonzero__()方法,当该方法返回时   整数零或bool值为False。 [1]

  •   
     

所有其他值都被认为是真的 - 所以很多类型的对象都是   永远都是。

答案 2 :(得分:1)

>>> bool(0)
False

所以..不,如果它是一个无关紧要的int。请进行一些跟踪,打印出count实际上是什么。