Python - 模条操作作为条件

时间:2015-10-12 15:44:09

标签: python conditional

我在lambda函数中看到了modulo运算符的这种用法,用于测试primality。有人可以解释为什么只要i大于x就会执行以下语句,如果这不是我所知道的实际布尔语句。如果分子大于分母,无论它们是否是因子,它也适用于除法。

if x % i:
    # Execute random foolishness

注意:我只在Python和Java中试过这个,所以如果这个用另一种语言工作,我很抱歉,因为它可能不是特定于语言的问题。

3 个答案:

答案 0 :(得分:4)

Python将非零值视为True,因此if x % i:if x % i != 0:相同。它只是一种快速测试x是否可以被i整除的方法。

答案 1 :(得分:2)

对于数字对象,python假定每个非零值为True,零为假,因此条件if x % i:将为真,直到x不能被i整除,否则它将是False

>>> bool(-1)
True
>>> bool(3)
True
>>> bool(0)
False

对于列表或字符串等其他对象也有这样的标准,如果你有一个空列表或字符串,python会将其评估为False,而对于其他情况,它将为True。

>>> bool(0)
False
>>> bool([])
False
>>> bool('')
False
>>> bool('a')
True
>>> bool([1])
True
>>> bool([''])
True

实际上是Truth value testing

  

可以测试任何对象的真值,用于if或while条件或下面布尔运算的操作数。以下值被视为false:

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

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

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

  •   
     

用户定义类的实例,如果类定义了__bool__()__len__()方法,则该方法返回整数零或bool值False。

     

所有其他值都被认为是真的 - 因此许多类型的对象始终为真。

答案 2 :(得分:0)

该陈述是以以下形式浓缩的:

if x % i != 0

只要模数不为零,就会执行此if。如果某个数字可以被i整除,则不会执行if数据块。