2011-09-23 69 views
1

直到我在代码中发现错误时,我感到有点困惑。我不得不改变这些表达式应该以不同的方式评估吗?

a.matched_images.count #True when variable is 0 

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

因为我很快想知道一个对象是否有任何图像,第一个代码会出现像照片具有图像,因为表达式的值为True当这意味着真的是假的(“没有图像”/ 0图像)

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

+1

如果a.matched_images.count是int 0,那么它应该计算为False。你可以在行之前插入一个打印类型(a.matched_images.count)命令吗?可能是一种方法? – DSM

+1

'count'是什么? –

+1

整数表达式如果非零则通常为“真”,否则为“假”。假设'a.matched_images.count'是一个整数,如果该值为负数,两者都会有不同的结果。 –

回答

1
>>> bool(0) 
False 

所以..不,如果它是一个无关紧要的int。请做一些跟踪,打印出其实count

+0

这可能是这个问题>>> bool('0')'我会仔细看看发生了什么。我一直很确定这个值是0,但我不知道它是'0'还是'0'。 –

3

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

+0

django模板变量为一个集合中的一个引用变量出现在GAE手册中,该属性的值是一个引用实体的所有实体的查询,并且在模板上下文中它是1.2版本中的新增功能,为<,>和==使用模板标签。所以性质是一个模板变量。 –

+0

@Ethan:如果计数是**小于**零呢? –

+0

@John:好的,谢谢。更新了答案。 –

2

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

下面的值被认为是假:

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

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

  • 任何空映射,例如{}。用户定义的类的

  • 情况下,如果类定义了一个 __nonzero__()__len__()方法,当方法返回 整数零或布尔值假。 [1]

所有其他值被认为是真实的 - 这么多种类的对象 总是如此。

+1

Python 2.x中的__nonzero__'在Python 3.x中变成__bool__ –